如何使用批处理脚本使用另一个目录的子文件夹名称在目录中创建新的空文件夹?

时间:2014-09-04 15:20:55

标签: windows svn batch-file scripting backup

我的主要目标是在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

 )

运行此代码后,我收到错误:文件名,目录名或卷标语法不正确。

2 个答案:

答案 0 :(得分: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命令中的组合目标文件夹(如代码中所示),但此aditional for允许只写一次目标文件夹的定义方式。

答案 1 :(得分:0)

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

的原因

这就是我收到错误的原因:文件名,目录名或卷标语法不正确。我在上面与你共享的脚本部分(工作正常)回答令牌子目录以获取文件夹名称并使用它。

相关问题