2014-09-04 36 views
0

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

) 

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

回答

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

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

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允许只写一次目标文件夹的定义方式。

+0

非常感谢您的回复,我昨天解决了它,只是忘了用我的答案更新问题。我认为你的解决方案也是正确的。 – user1722022 2014-09-05 13:57:27

相关问题