我正在尝试教自己一些简单的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”
感谢您的帮助! 标记
答案 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脚本来完成工作而无需对其进行硬编码
P.S你需要将文件夹的名称从tmp更改为LIB,文件名从LOL更改为ur文件名。脚本非常自我解释。
Unix shell比MS-DOS更好,所以不管怎样,最好不要使用cygwin