这里的第一个问题。我已经使用批处理文件来自动执行大量操作,但这个操作变得非常困难。
想象一下,我有一个文件夹(我们称之为'ProjectFolder'),我在这个项目文件夹中有一些文件夹(让我们称之为'数据','工具,'垃圾'),每个文件夹都有文件。 我想要的是在'ProjectFolder'内创建一个'backup'文件夹,在这个文件夹中创建一个名为'v001_date_time_user'的文件夹,并在此文件夹中复制文件夹'data'和'tools'。 然后我再次运行此脚本以创建新版本,并创建“v002_date_time_user”并再次复制相同的“数据”和“工具”文件夹和文件。
我现在可以做的是在'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
任何人都可以帮忙吗? 谢谢 路易斯
答案 0 :(得分: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。