2014-09-04 101 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

相關問題