簡體   English   中英

用於/ D的Windows批處理腳本多次執行

[英]Windows Batch Script- for /D delims Executing Multiple times

我試圖在Win7上設置批處理備份腳本。 它通常可以正常工作,但是我有一行代碼可以執行多次。 我已經進行了一些搜索,我認為這與批處理文件如何處理“()”中的代碼有關,但是我不確定解決此問題的最佳方法。

任何幫助都是極好的!

腳本:

for /D %%d in (C:\toBackupDir\*.*) do (
 for %%f in (C:\zipDir\*) do (
  for /f "tokens=1 delims=_" %%i in ("%%~nf") do (
    if "%%i"=="%%~nd" (
     if "%%~tf"=="%%~td" (
      echo "%%~nf" is "%%~nd" No Backup necessary.
     ) else (
      7z.exe a -tzip -stl -mx=1     "C:\zipDir\%%~nd_%DATE:~-4%.%DATE:~4,2%.%DATE:~7,2%.zip" "%%d"
     )
    )
  )
 )
)

如果“ %% i” ==“ %%〜nd”為true,則執行多次“ 7z.exe”行。 我的想法是,用於拆分文件名的last for循環被執行了很多次,但是一旦它獲得%i並進行比較,就可以完成了。 一旦執行“ 7z.exe”行,是否可以跳出循環? 我讀過,在批處理文件中進行拆分很棘手。

讓我知道您是否需要代碼細分。

先感謝您!

您還將針對每個zip文件測試每個目錄。 與250個目錄和匹配的zip相比,它們有60000多個。 但這根本沒有必要。 然后,您無法將文件夾的時間與“比較”時間進行比較-它不會自動更新。 因此,DIR的輸出根本不合適。 另外-現有的拉鏈式保險絲已經具備的功能,每次也會與它們進行比較。 因此,使用一個文件夾的兩個備份,您的批次將始終進行一個新的備份。 搜索zip文件的簡單循環實際上尚未完成,因為總是在MFT中輸入新文件,並且在創建問題之后進行循環。

我選擇了robocopy來列出文件,因為此時間戳非常適合比較。 首先,僅檢查文件夾以及相應的zip文件。 遞歸檢查文件夾中的文件以及相應的zip文件。 時間戳記將放置在列表中並進行排序。 循環設置了最后一個值,因此,如果最后(即最新)文件來自zip文件夾,則不需要備份。 還會為文件名生成合適的時間戳。

您可能需要調整路徑。

@echo off
setlocal
set "Folder=d:\toBackup"
set "Backup=d:\zipdir"
call :TAB
set "TS=."
for /d %%F in ("D:\files\*")do (
  set "TsFn="
  set "tozip="
  for /f "tokens=2,3delims=%TAB%" %%A in ('
    ( robocopy /L "%backup%" ".. only listing ..\\" "%%~nF_*.zip" /njh /fp /ts /ns /nc /ndl /njs ^
    ^& robocopy /L /e "%%F" ".. List only ..\\" /njh /fp /ts /ns /nc /ndl /njs ^)^|sort
  ')do ( 
    set "TsFn=%%A*%%~dpB"
    if /i "%%~dpB"=="%Backup%\" ( set "tozip="
    )else set "tozip=1"
  )
  if defined tozip call :timestamp
  if defined TsFn (
    setlocal enabledelayedexpansion
    for /f "tokens=1-3delims=*" %%S in ("!TS!*!TsFn!")do (
      endlocal
      if NOT defined tozip ( echo  %%T  %%~nxF  - No Backup necessary.
      )else echo 7z.exe a -tzip -stl -mx=1 "%Backup%\%%~nF_%%S.zip" "%%F"
    )
  )
)
pause
exit /b

:TAB
for /f "delims= " %%T in ('robocopy /L . . /njh /njs') do set "TAB=%%T"
 rem END TAB
exit /b

:Timestamp
 rem robocopy /L "\.. Timestamp ..\\" .
for /f "eol=D tokens=1-6 delims=/: " %%T in (' robocopy /L  /njh "\|" .^|find "123" ') do (
  set "TS=%%T%%U%%V-%%W%%X%%Y"
  set "TSDATE=%%T%%U%%V"
  set /a YY=%%T , MM=100%%U %%100 , TT=100%%V %%100
)
 rem END Timestamp
exit /b

如果匹配文件夾中沒有可用的zip文件,則當然會創建一個zip文件。

完整的備份程序

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM