Как я могу перемещать файлы в зависимости от их имени? - PullRequest
0 голосов
/ 31 мая 2018

Я пытаюсь переместить файлы в существующие подпапки на основе имен файлов.

Например, я хочу переместить файл с именем AP16742, найденный в каталоге X:\Files, в папкус именем AP в каталоге X:\Files\AP.Другие файлы с именем MO14823 Я хочу переместить в папку с именем MO в каталоге X:\Files\MO.

Я неопытен в кодировании, поэтому мне нужны пояснения, чтобы привести приведенный пример.

Вот что я попробовал:

@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir" 
SET "destdir=U:\destdir" 
FOR /f "delims=" %%a IN ('dir /b /a-d "%sourcedir%*.xml" ') DO ( 
  FOR /f "tokens=1delims=_-" %%b IN ("%%a") DO ( 
    FOR /f "delims=" %%d IN ( 'dir /b /ad "%destdir%*%%b*" ' ) DO ( 
      ECHO(MOVE "%%a" "%destdir%\%%d\" 
    ) 
  ) 
) 
GOTO :EOF

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Модификация ответа LotPings, в котором используется RoboCopy с опцией /MOV, , которая будет создавать каталоги по мере необходимости и перемещать в них файлы :

@Echo Off & SetLocal EnableDelayedExpansion
CD /D "X:\Files" 2>Nul || Exit /B
For %%A In (*) Do (Set "File=%%~nA"
    RoboCopy . "!File:~,2!" "%%A" /MOV >Nul)
0 голосов
/ 31 мая 2018

Простое объяснение было бы:

  • вы хотите распространять файлы в X:\Files по подпапкам с первыми 2 буквами имени файла.
  • Чтобы получить подстрокувам нужно установить содержимое переменной for в обычную переменную.
  • Установка и использование переменной внутри (блока кода) требует отложенного расширения.

@Echo off&SetLocal EnableExtensions EnableDelayedExpansion
Pushd "X:\Files"

For %%A in (*) do (
  Set "File=%%~nA"
  if not exist "!File:~0,2!" md "!File:~0,2!" 2>&1>Nul
  Move "%%A" "!File:~0,2!"
)
Popd

Если вы хотите переместить только две отдельные пары букв, а не все файлы, это также возможно без особых усилий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...