Предположим, у меня есть 10 файлов, генерируемых системой каждый день в папке D:\Temp. Имена генерируются СЛУЧАЙНО.

Предположим, мне нужно переименовать самый старый в «aaa», второй самый старый в «bbb», затем «ccc», «ddd» и так далее.

предположим, что это целевые имена, которые я буду использовать:

Beijing
shanghai
hangzhou
suzhou
newyork
lanzhou
huzhou
guangzhou
tianjin
sichuang

Может ли кто-нибудь помочь с пакетным сценарием для достижения этой цели?

Я действительно задал этот вопрос вчера и получил прекрасный ответ с помощью PowerShell, но сегодня я замечаю, что в виртуальной машине компании не установлен PowerShell (не разрешено устанавливать самостоятельно), поэтому необходимо снова публиковать вопрос, чтобы люди, которые уже ответили может сохранить свои (принять) голоса.

2 ответа2

0

Это должно работать для вас. Он переименовывает 26 файлов в aaa в zzz , самая старая дата создания в первую очередь. Посмотрите на вывод и удалите команду echo , если она в порядке.

@echo off&setlocal
set "startfolder=D:\temp"
set "alphas=abcdefghijklmnopqrstuvwxyz"
cd /d "%startfolder%"

set /a counter=0
for /f "tokens=3*" %%a in ('dir /a-d /od /tc ^| findstr "^[0-9]"') do set "fname=%%b"&call:process
goto:eof

:process    
setlocal enabledelayedexpansion
set "nname=!alphas:~%counter%,1!!alphas:~%counter%,1!!alphas:~%counter%,1!"
if not defined nname goto:eof
echo rename "%fname%" "!nname!"
endlocal
set /a counter+=1
goto:eof

Если ваша команда dir показывает время с AM/PM, установите tokens=4* .

0
@echo off
setlocal disableDelayedExpansion
set "file1=aaa"
set "file2=bbb"
set "file3=ccc"
set "file4=ddd"
set "file5=eee"
set "file6=fff"
set "file7=ggg"
set "file8=hhh"
set "file9=iii"
set "file10=jjj"

for /f "tokens=1,2* delims=: " %%A in (
  'wmic datafile where "drive='d:' and path='\\temp\\'" get creationDate^, name ^| findstr "^[0-9]" ^| sort ^| findstr /n "^"'
) do for /f "delims=" %%F in ("%%C") do (
  setlocal enableDelayedExpansion
  for %%N in ("!file%%A!") do (
    endlocal
    ren "%%F" %%N
  )
)

Если вы хотите изменить путь, убедитесь, что вы удвоили все \ as \\ и убедитесь, что путь начинается и заканчивается \\ . Соответствующая буква диска (с двоеточием) должна появиться в опции диска.

Оба значения диска и пути должны быть заключены в одинарные кавычки - WMIC использует синтаксис SQL.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .