DOS命令将文件从父目录复制到许多子目录中的特定文件夹

时间:2011-07-18 16:54:53

标签: dos

我正在尝试教自己一些简单的DOS命令,并使用相对简单的命令来复制或移动文件,但是这个特定的请求对我来说是一个挑战,并希望从这个论坛获得一些专业知识。

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

每当我更新父目录中的library.eds时,我想将该文件复制到包含名为“LIB”的文件夹的每个子目录中。我已将Child目录标准化为以下内容:

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”

感谢您的帮助! 标记

3 个答案:

答案 0 :(得分:1)

这是一个可以帮助你入门的命令:

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。

答案 1 :(得分:0)

如果您事先知道所有子目录,最简单的解决方案是批处理文件tutorial on batch files

我不知道循环在ms dos中如何工作但在linux bash shell循环中很容易编程..

任何方式批处理文件都是最简单的选择

答案 2 :(得分:0)

如果您可以下载cygwin,那么您可以使用以下bash脚本来完成工作而无需对其进行硬编码

The code

P.S你需要将文件夹的名称从tmp更改为LIB,文件名从LOL更改为ur文件名。脚本非常自我解释。

Unix shell比MS-DOS更好,所以不管怎样,最好不要使用cygwin