【问题标题】:How can I create new empty folders in a directory using names of subfolders of another directory using batch script?如何使用批处理脚本在使用另一个目录的子文件夹名称的目录中创建新的空文件夹?
【发布时间】:2014-09-04 15:20:55
【问题描述】:

我的主要目标是备份 REPOS 文件夹中的 SVN 存储库。由于“svnadmin hotcopy”必须同时具有源文件夹和目标文件夹,我需要在不同的目录中创建名为 folderName_backup 的新文件夹,然后使用“svnadmin hotcopy”复制它们。顺便说一句,这必须在 Windows 批处理文件中完成。我这部分的代码如下:

for /d %%X in (%source%\*) do (
 md %destination%\%%X_backup
 svnadmin hotcopy %%X %destination%\%%X_backup

 )

运行此代码后出现错误:文件名、目录名或卷标语法不正确。

【问题讨论】:

    标签: windows svn batch-file scripting backup


    【解决方案1】:
    set "source=c:\where\the\folders\are"
    set "destination=c:\where\the\backup\will\be"
    
    for /d %%a in ("%source%\*") do for %%b in ("%destination%\%%~nxa_backup") do (
        if not exist "%%~fb\" md "%%~fb" 
        if exist "%%~fb\" svnadmin hotcopy "%%~fa" "%%~fb"
    )
    

    %%~fb%%b 中引用的文件/文件夹的完整路径。 %%~fa 的等价物。 %%~nxa%%a 中引用的文件/文件夹的名称和扩展名。

    代码将所有路径括在引号中以避免出现空格问题,并在创建和备份之前测试文件夹是否存在

    您可以删除内部for %%b 并在mdsvnadmin 命令中使用组合的目标文件夹(如您的代码中所示),但是这个附加的for 只允许写入一次目标文件夹的位置已定义。

    【讨论】:

    • 非常感谢您的回复,我昨天解决了,只是忘了用我的答案更新问题。我认为您的解决方案也是正确的。
    【解决方案2】:
    for /f "tokens=*" %%G in ('dir /b /a:d "%Source%"') do (
        md %destination%\%%G
    
        svnadmin hotcopy %Source%\%%G %Destination%\%%G 
     )
    

    旧解决方案的问题是,它不是在目录中获取文件夹名称,而是获取目录的子目录。这就是为什么结果类似于C:\where\the\backup\will\be\C:\where\the\folders\are

    这就是我收到错误的原因:文件名、目录名或卷标语法不正确。我在上面与您共享的脚本部分(工作正常)对子目录进行标记化以获取文件夹名称并使用它。

    【讨论】:

      猜你喜欢
      • 2013-09-04
      • 1970-01-01
      • 2021-09-26
      • 1970-01-01
      • 1970-01-01
      • 2018-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多