【问题标题】:Copy a folder and its content several times, then rename them多次复制文件夹及其内容,然后重命名它们
【发布时间】:2024-05-18 15:40:01
【问题描述】:

我正在寻找一个用于 Windows 7 的简单批处理脚本,用于从目标复制文件夹及其内容,并将其粘贴到另一个目标,x 次,名称递增。

例子:

给定一个文件夹 C:\Folder。我想将它复制到这个文件夹中:C:\Destination 7 次,名称不同,所以结果看起来像这样(在 C:\Destination 内):

复制1

复制2

复制3

.

.

复制7

提前致谢!

【问题讨论】:

    标签: batch-file copy directory rename


    【解决方案1】:
    for /l %%A in (1,1,7) do @xcopy "C:\Folder" "C:\Destination\Copy%%A" /i
    

    有关所有选项和帮助,请参阅 for /?xcopy /?


    要在命令行上运行,请确保使用 %A 而不是 %%A。

    使用 %variable 从命令提示符执行 for。使用 %%variable 在批处理文件中执行 for 命令。变量区分大小写,必须用 alpha 值表示,例如 %A、%B 或 %C。

    【讨论】:

    • 为了更好的衡量标准,我建议您的回答解释 %%A 和 %A 之间的区别。像我这样的人会抓住你的代码行并且无法从命令行运行它。我知道该问题的答案在您链接到的文档中,但为什么不自己完成答案呢?
    • @Ickster 添加了% 符号的说明。
    • @DavidRuhmann 正是我需要的,但是如何调整它以添加前导零,例如 001
    【解决方案2】:

    这就是你需要的:Windows Batch Script for Incremental Backup

    @echo off
    set source=c:\temp\test\1
    set dest_path=c:\temp\test\2\
    pushd %dest_path%
    setlocal enableDelayedExpansion
    set "dest_folder_name=Backup"
    set "n=0"
    for /f "delims=" %%F in 
    (
       '2^>nul dir /b /ad "%dest_folder_name%*."^|findstr /xri "%dest_folder_name%[0-9]*"'
    ) 
    do (
      set "name=%%F"
      set "name=!name:*%dest_folder_name%=!"
      if !name! gtr !n! set "n=!name!"
    )
    set /a n+=1
    set final_destination="%dest_path%%dest_folder_name%%n%"
    md %final_destination%
    robocopy %source% %final_destination% /E /R:3 /W:10 /FFT /NP /NDL
    popd
    @echo on
    

    【讨论】: