我的主要目标是在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 :(得分: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
并使用md
和svnadmin
命令中的组合目标文件夹(如代码中所示),但此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
这就是我收到错误的原因:文件名,目录名或卷标语法不正确。我在上面与你共享的脚本部分(工作正常)回答令牌子目录以获取文件夹名称并使用它。