所以基本上我有这个批处理文件:
@echo off
bps -f bps.txt
exit
每次运行批处理时,新的bps.txt文件都会覆盖旧文件。我想要的是以某种方式每次运行它时,新文件必须以例如bps1.txt。如果我再次运行它应该以bps2.txt出现,依此类推。因此,例如,如果我运行批次3次,我会有bps.txt,bps1.txt,bps2.txt。
答案 0 :(得分:2)
没有内置功能。使用计数器,检查文件是否存在,如果没有递增计数器并再试一次:
set "counter="
:SearchFreeFile
if exist bps%counter%.txt (
set /a counter+=1
goto :SearchFreeFile
)
bps -f bps%counter%.txt
答案 1 :(得分:1)
循环耗时。如果您希望连续创建文件名,可以这样做:
for /f %%a in ('dir /b bps*.txt^|find /c /v ""') do set /a next=%%a
bps -f bps%next%.txt
这里的for
命令不用于循环 - 它只是将命令的输出保存在%%a
变量的撇号中。使用dir
我们列出具有该名称模式的现有文件,find
命令对它们进行计数。因此,如果您已经拥有该名称的2个文件,则输出将为" 2"。
与您的示例不同,第一个文件将被命名为" bps0.txt",而不是" bps.txt"。如果您想避免这种情况,请改用:
for /f %%a in ('dir /b bps*.txt^|find /c /v ""') do set /a next=%%a
if %next% EQU 0 (set bps=bps) else (set bps=bps%next%)
bps -f %bps%.txt
答案 2 :(得分:0)
你可以这样做:
@echo off
if not exist "bps.txt" (
bps -f bps.txt
exit
)
for /l %%i in (1,1,10000) do (
set "number=%%i"
if not exist "bps%%i.txt" goto :break
)
echo 10000 files with this name already exist
pause
exit
:break
bps -f bps%number%.txt
pause
exit
答案 3 :(得分:0)
我的previous answer使用第一个“免费”计数器 - 如果删除一些“旧”文件,它将填补新文件的空白。
另一种方式(有点不寻常,但有效):使用替代数据流来“保存”计数器。为每个实例添加+1,与可能删除某些(或所有)以前的文件无关(至少在达到Integer的限制之前)。
Accesskey
您可以使用<%~f0:count set /p count=
set /a count+=1
(echo %count%)>%~f0:count
bps -f bps%count%.txt
(注意:如果文件存在,则不检查)