Запустите этот пакетный файл из родительской папки папки « Отчеты»:
for /f "delims=" %%a in ('dir /b /s "Reports folder\*.rep"') do for /f "tokens=2 delims=-" %%i in ("%%~a") do (
if not exist "%%~dpa%%i\" md "%%~dpa%%i"
move "%%~a" "%%~dpa%%i\"
)
%% a и %% i - переменные, используемые в двух циклах for .Первый содержит полные пути к.Файлы REP (любезно предоставлены внешним циклом), и последний содержит имена папок, извлеченные из имен файлов (любезно предоставленный внутренним циклом).
for /?
это то, на что действительно должны обратить внимание все заинтересованные лица (обратите внимание, что в пакетных файлах знаки% удваиваются):
%~I - expands %I removing any surrounding quotes (")
%~dI - expands %I to a drive letter only
%~pI - expands %I to a path only
Так что же означает «%% ~ dpa %% i»? Предположим, один из.Файлы REP, расположенные с помощью команды dir, называются "C:\Reports folder\123-Chemistry-101.rep"
.
%% ~ dpa будет означать букву диска и путь к файлу за вычетом окружающих кавычек, то есть C:\Reports folder\
.
%% i , как я уже отмечал выше, будет именем папки, извлеченным из имени файла (что угодно, между двумя разделителями дефисов), так что в этом случае Chemistry
.
Собрав все это вместе, «%% ~ dpa %% i» для этого файла расширится до "C:\Reports folder\Chemistry"
, потому что именно туда мы хотим переместить файл.