2013-02-07 28 views
0

第一個問題在這裏。我已經使用批處理文件來自動執行很多操作,但是這個變得非常困難。假設我有一個文件夾(我們稱之爲'ProjectFolder'),並且在這個項目文件夾中有一些文件夾(讓我們稱之爲'數據','工具','垃圾'),並且每個文件夾都有文件。 我想要在'ProjectFolder'內創建一個'備份'文件夾,在這個文件夾內部創建一個名爲'v001_date_time_user'的文件夾,並在該文件夾內複製文件夾'data'和'tools'。 然後,我再次運行此腳本以創建新版本,並創建'v002_date_time_user'並再次複製相同的'data'和'tools'文件夾和文件。使用版本和日期創建文件夾

我現在可以做的是在'備份'文件夾內創建一個名爲'v_date_time_user'的文件夾,但我不知道如何創建3位數的版本部分。

這是我的代碼現在:

@echo off & setlocal enableextensions 

:: variables 
set dateNtime="[%date:~6,6%-%date:~3,2%-%date:~0,2%]_[%time:~0,2%-%time:~3,2%]" 
set backup="backup" 

set /A version=000 

set backupcmd=xcopy /s /c /d /e /h /i /r /k /y 

:: check for existence of [backup] 
:: if [backup] doesn't exist, create it 
if not exist "%backup%\" (
    echo folder "%backup%" not found 
    echo creating folder "%backup%" 
    md "%backup%" 
) 

:: create version folder with version number_date_hour_user 
md "%backup%\v%version%_%dateNtime%_[%USERNAME%]" 

:: copy older version into newer version 
xcopy "data" "%backup%\v%version%_%dateNtime%_[%USERNAME%]\data" /E /C /I /H /Q 
xcopy "tools" "%backup%\v%version%_%dateNtime%_[%USERNAME%]\tools" /E /C /I /H /Q 

誰能幫助? 謝謝 路易斯

回答

0

有幾種方法我可以想到。您可以遍歷以v和數字開頭的每個文件夾,並對它們進行計數。然後,如果您以000開頭,那麼匹配次數就是您的下一個號碼。

@echo off 
setlocal enabledelayedexpansion 
:: if you're starting with 001 rather than 000, then set count=1 instead of 0 here. 
set count=0 
pushd "path\to\ProjectFolder\backup" 
for /f %%I in ('dir /b v* ^| findstr "^v[0-9][0-9][0-9]"') do set /a count=!count!+1 
popd 
set count=00%count% 
set count=%count:~-3% 

然後%count%將是您的下一個號碼。

另一種方法是循環訪問dir /b /o:n(按字母順序排序)並捕獲最後一個目錄名稱,可能是最高數字的v ###。然後抓住捕捉的前四個字符,並砍掉v。

+0

它的工作完美rojo!謝謝你的幫助。真的感謝。你爲我節省了幾個小時的工作。 – user2051783

+0

@ user2051783 - Awww,它並不大。你做了所有的工作。我只是幫助一點邏輯。如果您同意這樣做是合適的,請考慮[正式接受我的回答](http://meta.stackexchange.com/questions/5234)。 – rojo

相關問題