1

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

for /r %x in (\\Server6\doc_production\*38316468*) do ren "%x" /y \\Server6\doc_production\error\

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

  1. Для чего нужен параметр /y? Я ничего не мог найти, прибегая к помощи.

  2. Что именно делает эта команда?

ОБНОВЛЕНИЕ: Спасибо за ответ. Многие говорили, что эта команда переместит файлы, соответствующие шаблону, в подпапку ошибок. Поэтому я попытался проверить это на моей локальной машине. Я создал следующий каталог:

C:
├──test
│   └──error

И я вставил файл 38316468.sql в тестовую папку.
Затем я выполнил команду:

for /r %x in (C:\doc_production\*38316468*) do ren "%x" /y C:\doc_production\error\

Но ничего не происходит. Команда выполняется без каких-либо сообщений об ошибках. Нет синтаксических ошибок. Но это ничего не делает. Он не перемещает файл, не переименовывает файл. Почему это так?

2 ответа2

2

Это не выглядит действительным для меня.
RENAME (REN) не имеет параметра /y и требует, чтобы вторым параметром было имя файла (а не папка, как здесь).
У MOVE есть «/y», что означает «не беспокойте меня вопросами" Вы уверены ", когда цель уже существует, и предположите, что я ответил" Да "», и все в порядке с папкой в качестве второго параметра ».
Но в случае MOVE /Y должен появляться непосредственно после команды MOVE и перед параметрами. Если вы замените REN на MOVE, это все равно синтаксическая ошибка.

В любом случае: команда FOR создает список всех файлов (просматривает подкаталоги), соответствующих шаблону 38316468, а затем вызывает REN для каждого соответствия по очереди. REN (должен быть MOVE) пытается переименовать (переместить) каждый файл в папку ошибок.
Но использование /Y по-прежнему неправильно для MOVE.

Другая проблема, которая связана с ошибкой - это подпапка исходной папки, в которой работает FOR. Это заставит команду попытаться переместить файлы на себя. (Например, из папки ошибок в папку ошибок.) Это может быть, а может и не быть проблемой, в зависимости от того, будет ли папка с ошибками очищена позже перед повторным использованием команды FOR.

И последнее, но не менее важное: несколько слов предостережения:
Использование переменных% X в пакетном файле требует удвоения% до %% X. В командной строке вы можете использовать один%. И переменные% X чувствительны к регистру, поэтому% X и% x - это не одно и то же.

1

Давайте разберем его, чтобы вы могли узнать, что он делает.

for /r %x Эта команда проходит по дереву папок, начиная с пути \\Server6\doc_production\*38316468* , и выполняет оператор DO для каждого соответствующего файла.

В вашей команде DO или действие переименовано в ren .

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

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

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