Пакетное перемещение файлов в папки.Папки названы на основе имени файла - PullRequest
0 голосов
/ 23 ноября 2018

Попытка найти летучую мышь, которая может сделать это, но не повезло.Имея очень ограниченные знания о пакетном кодировании, я не знаю, с чего начать редактирование аналогичного существующего кода.

У меня есть файлы в папке, как показано ниже:

    \\NAS\ART\1234.pdf
    \\NAS\ART\1235.ai
    \\NAS\ART\1236.eps

Я хочу переместить этифайлы в другую папку на сервере, где структура папок выглядит следующим образом:

\\NAS\Art\1234\Original\1234.pdf
\\NAS\Art\1235\Original\1235.ai
\\NAS\Art\1236\Original\1236.eps

Это поместит файл в исходную папку папки с именами файлов.Извините, если это сбивает с толку.

Я обнаружил, что это близко к тому, что я хочу, но минус удаление символов.

@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

1 Ответ

0 голосов
/ 23 ноября 2018

Вы можете использовать этот пакетный файл для перемещения всех не скрытых файлов в \\NAS\ART\ в подходящие подкаталоги, созданные ранее, если они еще не существуют, с перезаписью файла с тем же именем в целевом каталоге.

@echo off
for %%I in ("\\NAS\ART\*") do (
    if not "%%I" == "%~f0" (
        md "%%~dpnI\Original" 2>nul
        move /Y "%%I" "%%~dpnI\Original\"
    )
)

Условие IF позволяет избежать перемещения командного файла при сохранении также в каталоге \\NAS\ART\ и может быть удалено, если это, безусловно, никогда не происходит.

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

  • echo /?
  • for /?
  • if /?
  • md /?
  • move /?

Читайте также статью Microsoft о Использование операторов перенаправления команд дляобъяснение 2>nul, используемое для подавления вывода сообщения об ошибке командой MD для обработки STDERR в каталоге для создания уже существующего путем перенаправления этого сообщения об ошибке в devлед NUL .

...