Объединение двух команд FOR (/ f / l) в командный файл - PullRequest
0 голосов
/ 22 марта 2012

Хорошо, ребята, я новичок в работе с пакетными файлами, и у меня есть два файла, которые я создал ранее, и оба работают независимо.

Я хочу объединить их, но до сих пор не до конца понимаю команду FOR. Я надеялся, что кто-нибудь сможет объединить эти два набора кода в один и, если возможно, объяснить, как они пришли к коду, который они использовали из моих двух источников.

  1. Этот файл копирует другой файл (в данном случае test.txt) в каждый подкаталог в каталоге

FOR /R d:\ %%A IN (test.txt) DO copy d:\%username%\Desktop\Test\Resources\test.txt %%A<br> FOR /R h:\ %%A IN (test.txt) DO copy d:\%username%\Desktop\Test\Resources\test.txt %%A

  1. Этот файл копирует и переименовывает другой файл X количество раз (в данном случае 5), переименовывая каждую последующую копию с шагом 1.

For /l %%1 in (1,1,10) do ( copy test.txt test%%1.txt > nul )

Как правило, я хочу, чтобы выбранный файл (test.txt) копировался из заданного местоположения в каждый подкаталог в каталоге, а затем копировался в каждую папку X раз и переименовывался с увеличивающимися значениями, например

test1.txt

test2.txt

test3.txt

и т.д.

Заранее спасибо.

1 Ответ

2 голосов
/ 22 марта 2012

Это на самом деле очень просто.

У вас уже есть работающий код, который копирует из источника в каждый подкаталог.В псевдокоде: FOR (each directory) DO COPY source to target.

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

FOR (each directory) DO (
  COPY source to target
  FOR (N=1 TO 10) DO COPY source to targetN
)

Ни один из приведенных выше синтаксисов не является реальным, за исключением того, что скобки после DO на самом деле показывают, как вы позволяете команде batch FOR выполнитьблок из нескольких команд.(На самом деле есть другие методы, чтобы сделать это, но парены работают просто отлично.)

Часть, которую вы пропустили, - это как вставить возрастающее число в целевое имя %% A.Это делается с помощью модификаторов переменных FOR, как описано в конце документации FOR, к которой можно получить доступ из командной строки, набрав HELP FOR или FOR /?.

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

  • %%~dpnA = диск: \ путь \ baseName (без расширения)
  • %%~xA = .extension, включая точку.

У вас уже есть увеличивающийся номер - я собираюсь использовать %%N вместо %%1.Таким образом, полной целью будет объединение трех компонентов: %%~dpnA%%N%%~xA.

Соединение всего этого дает полное решение:

FOR /R d:\ %%A IN (test.txt) DO (
  copy d:\%username%\Desktop\Test\Resources\test.txt %%A
  FOR /L %%N IN (1 1 10) DO copy d:\%username%\Desktop\Test\Resources\test.txt %%~dpnA%%N%%~xA
)
...