Команда DOS для копирования файла из родительского каталога в определенную папку во многих дочерних каталогах - PullRequest
1 голос
/ 18 июля 2011

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

C:\Parent\library.eds   (location of my source file)

Каждый раз, когда я обновляю library.eds в родительском каталоге, я хотел бы скопировать этот файл в каждый дочерний каталог, содержащий папку с именем «LIB».Я стандартизировал дочерние каталоги следующим образом:

C:\Parent\Child1\INPUT
C:\Parent\Child1\OUTPUT
C:\Parent\Child1\LIB      {paste library.eds here}

C:\Parent\Child2\INPUT
C:\Parent\Child2\OUTPUT
C:\Parent\Child2\LIB      {paste library.eds here}

и перебираю, пока все дочерние каталоги с каталогами LIB не содержат обновленный файл "library.eds"

Спасибо за вашу помощь!Mark

Ответы [ 3 ]

1 голос
/ 03 декабря 2011

Вот команда, с которой можно начать:

FOR /F "delims=" %%D IN ('DIR /b /a:D /s C:\Parent\LIB') DO @ECHO COPY "C:\Parent\library.eds" "%%~D"

Как только все заработает так, как вы хотите, удалите часть @ECHO, чтобы фактически сделать копию:

FOR /F "delims=" %%D IN ('DIR /b /a:D /s C:\Parent\LIB') DO COPY "C:\Parent\library.eds" "%%~D"

Дополнительная помощь для этих команд

HELP FOR
HELP DIR

Как это работает

FOR /F ... %variable IN ('command') DO otherCommand %variable...

Это позволяет вам выполнить command и выполнить цикл по выходу. Каждая строка будет вставлена ​​в %variable и может быть расширена в otherCommand столько раз, сколько вы хотите, где вам угодно. %variable при фактическом использовании может иметь только однобуквенное имя, например %V.

"delims="

Это позволяет игнорировать любые выходные данные с пробелами с помощью 'command', поэтому он правильно обрабатывает каталоги, в именах которых есть пробелы.

DIR /b /a:D /s C:\Parent\LIB

Будет выполнен поиск всех файлов в C:\Parent с именем LIB. Он будет рекурсивно проходить через подкаталоги из-за /s. Он найдет только каталоги (из-за /a:D). Он выведет их так, чтобы это было полезно для циклического воспроизведения, из-за /b.

%%D instead of %D

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

0 голосов
/ 18 июля 2011

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

Код

P.S. Вам нужно изменить имя папки с tmp на LIB и имя файла с LOL на имя вашего файла. Сценарий довольно понятен.

Оболочки Unix лучше, чем MS-DOS, так что в любом случае неплохо бы получить Cygwin

0 голосов
/ 18 июля 2011

если вы знаете все дочерние каталоги до этого, самое простое решение - пакетные файлы учебник по пакетным файлам

Я не знаю, как работают циклы в ms dos, но в linux циклы оболочки bash просты в программировании ..

Любые способы пакетных файлов - самый простой вариант

...