Я новичок в программировании пакетных файлов и анализирую существующий пакетный файл, который был реализован бывшим разработчиком в нашей компании. Поэтому я пытаюсь выяснить, что он намеревался сделать. У меня есть следующая команда:
for /r %x in (\\Server6\doc_production\*38316468*) do ren "%x" /y \\Server6\doc_production\error\
Я знаю, что это команда цикла, которая должна рекурсивно проходить по указанному пути. Но есть некоторые части, которые мне неизвестны:
Для чего нужен параметр /y? Я ничего не смог найти в гугле.
Что именно делает эта команда?
ОБНОВЛЯТЬ: Спасибо за ответ. Многие говорили, что эта команда переместит файлы, соответствующие шаблону, в подпапку error. Поэтому я попробовал проверить ее на своей локальной машине. Я создал следующий каталог:
C:
├──test
│ └──error
И я вставил файл 38316468.sql в папку test.
Затем я выполнил команду:
for /r %x in (C:\doc_production\*38316468*) do ren "%x" /y C:\doc_production\error\
Но ничего не происходит. Команда выполняется без сообщения об ошибке. Синтаксических ошибок нет. Но она ничего не делает. Она не перемещает файл, не переименовывает файл. Почему так?
решение1
Мне это не кажется допустимым.
RENAME (REN) не имеет параметра /y и требует, чтобы 2-й параметр был именем файла (а не папкой, как здесь).
MOVE имеет "/y", что означает "не беспокоить меня вопросами "вы уверены", когда цель уже существует, и предположим, что я ответил "Да"", и это нормально с папкой в качестве 2-го параметра.
Но в случае MOVE /Y должен стоять сразу после команды MOVE и перед параметрами. Если заменить REN на MOVE, это все равно будет синтаксической ошибкой.
В любом случае: команда FOR создает список всех файлов (будет просматривать подкаталоги), соответствующих шаблону38316468и затем вызывает REN для каждого совпадения по очереди. REN (должен быть MOVE) пытается переименовать (переместить) каждый файл в папку с ошибкой.
Но использование /Y все еще неверно для MOVE.
Другая проблема в том, что ошибка — это подпапка исходной папки, в которой работает FOR. Это заставит команду попытаться переместить файлы на себя. (Например, из папки ошибок в папку ошибок.) Это может быть или не быть проблемой в зависимости от того, очищается ли папка ошибок позже, перед повторным использованием команды FOR.
Последнее, но не менее важное: несколько предостережений:
использование переменных %X в пакетном файле требует удвоения % до %%X. В командной строке вы можете использовать один %. И переменные %X чувствительны к регистру, поэтому %X и %x — это не одно и то же.
решение2
Давайте разберем его, чтобы вы могли понять, что он делает.
for /r %x
Эта команда проходит по дереву папок, начиная с \\Server6\doc_production\*38316468*
пути, и выполняет оператор DO для каждого соответствующего файла.
В вашей команде DO
действие «или» предназначено ren
для переименования.
Отключает /y
вывод командной строки с предложением перезаписать файлы из источника, которые уже существуют в месте назначения.
Похоже, что он ищет подстановочный номер в первом каталоге и переименует его и перенесет в папку /error/, но нет имени файла, чтобы это действительно сработало. Для корректной работы этой команды необходимо указать имя файла после папки /error/.