0

ここで最初の質問。多くのアクションを自動化するためにバッチファイルを使用しましたが、これは非常に困難になっています。

フォルダー(「ProjectFolder」と呼びます)があり、このプロジェクトフォルダー内にいくつかのフォルダー(「data」、「tools」、「trash」と呼びます)があり、これらの各フォルダーにファイルがあるとします。私が欲しいのは、「ProjectFolder」内に「backup」フォルダーを作成し、このフォルダー内に「v001_date_time_user」というフォルダーを作成し、このフォルダー内に「data」フォルダーと「tools」フォルダーをコピーすることです。次に、このスクリプトを再度実行して新しいバージョンを作成すると、「v002_date_time_user」が作成され、同じ「data」および「tools」フォルダーとファイルが再度コピーされます。

今できることは、「backup」フォルダー内に「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 

誰か助けてもらえますか?ありがとうルイス

4

1 に答える 1

0

私が考えることができるいくつかの方法があります。avと数字で始まるすべてのフォルダーをループして、それらを数えることができます。次に、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%、次の番号になります。

もう1つの方法は、ループしてdir /b /o:n(アルファベット順)、最後のディレクトリ名(おそらく、最大の番号を持つv ###)をキャプチャすることです。次に、そのキャプチャの最初の4文字を取得し、vを切り取ります。

于 2013-02-07T18:06:45.490 に答える