0

这里的第一个问题。我已经使用批处理文件来自动执行很多操作,但这一个变得非常困难。

想象一下,我有一个文件夹(我们称之为“ProjectFolder”),我在这个项目文件夹中有一些文件夹(我们称之为“数据”、“工具”、“垃圾”),每个文件夹都有文件。我想要的是在“ProjectFolder”中创建一个“备份”文件夹,并在该文件夹中创建一个名为“v001_date_time_user”的文件夹,并在该文件夹中复制文件夹“数据”和“工具”。然后我再次运行这个脚本来创建一个新版本,它会创建“v002_date_time_user”并再次复制相同的“数据”和“工具”文件夹和文件。

我现在可以做的是在“备份”文件夹中创建一个名为“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%将是您的下一个号码。

另一种方法是遍历dir /b /o:n(字母排序)并捕获最后一个目录名称,大概是 v### 具有最高数字。然后抓住该捕获的前四个字符并砍掉 v。

于 2013-02-07T18:06:45.490 回答