仅当目标子文件夹中不存在文件时,才如何将所有文件从一个目录复制到另一个目录?

时间:2018-10-11 16:31:41

标签: windows batch-file cmd command-prompt

我有一个目录,其中直接有文件def func(): x= int(input()) while (x>1): if x%2 == 0: x = x//2 print(x) elif x%2 != 0: x= x*3+1 print(x) func()
我只想将所有这些文件复制到C:\test1C:\test2的任何子目录中。

需要编写一个Windows批处理文件才能执行此操作。任何帮助表示赞赏。

我尝试使用以下内容,但它不会在目标目录中递归搜索:

C:\test2

2 个答案:

答案 0 :(得分:1)

示例使每个人都更容易理解任务的要求。
因此,让我从一个示例开始。

源目录C:\test1包含以下文件:

  • Test1.txt
  • Test2.txt
  • Test3.txt

目标目录 C:\test2包含以下目录和文件:

  • 子文件夹1
    • Test2.txt
  • 子文件夹2
    • 子文件夹3
      • Test3.txt

在此示例中,仅应将文件Test1.txt复制到目录C:\test2,因为Test2.txtTest3.txt已经存在于C:\test2的子文件夹中。

因此,批处理文件执行后,目录 C:\test2应该如下所示:

  • 子文件夹1
    • Test2.txt
  • 子文件夹2
    • 子文件夹3
      • Test3.txt
  • Test1.txt

这可以通过以下方式实现:

@echo off
for %%I in ("C:\test1\*") do (
    dir "C:\test2\%%~nxI" /A-D /B /S >nul 2>nul
    if errorlevel 1 copy "%%I" "C:\test2\" >nul
)

也可以使用single command line来做到这一点:

@for %%I in ("C:\test1\*") do @dir "C:\test2\%%~nxI" /A-D /B /S >nul 2>nul || copy "%%I" "C:\test2\" >nul

要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读每个命令显示的所有帮助页面。

  • dir /?
  • copy /?
  • echo /?
  • for /?
  • if /?

答案 1 :(得分:0)

如果您想继续使用PowerShell,此代码可能会有所帮助。如果您满意,文件将被正确复制,请从-WhatIf cmdlet中删除Copy-Item

好吧,我承认我没有用于测试的test1和test2目录,但这可能会让您入门。

$targetdir = 'C:\test2'

Get-ChildItem -File -Path 'C:\test1' |
    ForEach-Object {
        if ((Get-ChildItem -File -Recurse -Path $targetdir -Filter $_.Name).Count -eq 0) {
            Copy-Item -Path $_.FullName -Destination $targetdir -WhatIf
        }
    }

如果将上面的脚本另存为Copy-IfNone.ps1,则可以使用以下命令从cmd shell运行该脚本:

powershell -NoProfile -File .\Copy-IfNone.ps1