通过批量创build新文件而不覆盖旧文件

所以基本上我有这个batch file

@echo off bps -f bps.txt exit

每次运行批处理时,新的bps.txt文件都会覆盖旧的文件。 我想要的是每次我运行它时,新的文件必须出来,如bps1.txt。 如果我再次运行它应该出现为bps2.txt等。 所以例如,如果我运行批次3次,我会有bps.txt,bps1.txt,bps2.txt。

这没有任何功能。 使用一个计数器,检查文​​件是否存在,如果不是增加计数器并再次尝试:

 set "counter=" :SearchFreeFile if exist bps%counter%.txt ( set /a counter+=1 goto :SearchFreeFile ) bps -f bps%counter%.txt 

循环是耗时的。 如果你期望文件名是连续创建的,你可以这样做:

 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 

你可以这样做:

 @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 

我以前的答案是第一个“自由”的计数器 – 如果你删除了一些“旧”文件,它将填补新的文件的空白。

另一种方式(有点不寻常,但有效):使用替代数据流来“保存”计数器。 为每个实例添加+1,独立于某些(或全部)以前文件的可能删除(至少在达到Integer限制之前)。

 <%~f0:count set /p count= set /a count+=1 (echo %count%)>%~f0:count bps -f bps%count%.txt 

你可以用(echo 0)>mybatch.bat:count来“重置”计数器

(注意:不检查,如果文件存在)