我需要复制一个文件并将其粘贴到许多目录中,我可以在Windows提示符下使用单个命令执行此操作吗? 我试过这段代码,但它没有用:
> copy C:\main\folder-1\docs\file.txt C:\main\*\docs
名称是说明性的,但其理念是:在" main"文件夹我有50个文件夹("文件夹-1","文件夹-2",...,"文件夹-50")...并且每个文件夹内#34;文件夹-N",我有另一个名为" docs"的文件夹。每次我创建一个文件到任何"文件夹-N \ docs"我需要将其粘贴到所有"文件夹-N \ docs"。
中有可能吗?或者我真的需要按文件夹粘贴文件,文件夹?
答案 0 :(得分:3)
直接从命令行:
for /D %x in (c:\main\*.*) DO COPY c:\main\folder-1\docs\file.txt %x\docs\file.txt
从BAT文件或CMD文件(而不是命令行),您需要再次转义%变量
for /D %%x in (c:\main\*.*) DO COPY c:\main\folder-1\docs\file.txt %%x\docs\file.txt
当然,如果子目录" docs"目录不存在于" main"的每个子文件夹中,迭代将打印错误。这就是为什么在我上面的例子中我明确指定复制到%x \ docs \ file.txt。如果我刚刚说'%x \ docs"作为副本的目标,它可能会创建一个名为" docs"它包含file.txt源代码的内容。
或者只需输入"帮助"在命令提示符下。
答案 1 :(得分:0)
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir=U:\sourcedir\one"
:: Build list of directorynames
SET "dnames="
FOR /f "delims=" %%a IN ('dir /b /ad "%sourcedir%" ') DO (
IF EXIST "%sourcedir%\%%a\docs\" SET "dnames=!dnames! "%%a""
)
FOR %%a IN (%dnames%) DO FOR %%b IN (%dnames%) DO IF NOT %%a==%%b (
FOR %%s IN ("%sourcedir%\%%~a\docs\*") DO (
IF NOT EXIST "%sourcedir%\%%~b\docs\%%~nxs" ECHO(COPY "%sourcedir%\%%~a\docs\%%~nxs" "%sourcedir%\%%~b\docs\%%~nxs"
)
)
GOTO :EOF
您需要更改sourcedir
的设置以适合您的具体情况。
为了测试目的,所需的COPY命令仅为ECHO
。 在您确认命令正确后,将ECHO(COPY
更改为COPY
以实际复制文件。
我建议您在愤怒发布之前创建几个小子目录的测试子树。请记住,这"报告"可能会说将同一个文件从dir1和dir5复制到dir3但是因为文件实际上会从dir1复制到dir3而被释放,所以dir5的副本不会发生(当检查dir5的副本时,dir1的副本已经已经发生了。)
您可以通过将copy
附加到>nul
行来取消copy
报告。
请注意,此例程一次面向一个文件并显示应执行的操作。以下例程应该做同样的事情,更短但不提供优雅的测试结构:
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir=U:\sourcedir\one"
:: Build list of directorynames
SET "dnames="
FOR /f "delims=" %%a IN ('dir /b /ad "%sourcedir%" ') DO (
IF EXIST "%sourcedir%\%%a\docs\" SET "dnames=!dnames! "%%a""
)
FOR %%a IN (%dnames%) DO FOR %%b IN (%dnames%) DO IF NOT %%a==%%b (
ECHO(xcopy /d "%sourcedir%\%%~a\docs\*" "%sourcedir%\%%~b\docs\"
)
GOTO :EOF
同样,报告xcopy
,而不是为了测试目的而执行。