批量创建新文件而不覆盖旧文件

时间:2016-02-21 12:17:21

标签: windows batch-file command-prompt

所以基本上我有这个批处理文件:

@echo off bps -f bps.txt exit

每次运行批处理时,新的bps.txt文件都会覆盖旧文件。我想要的是以某种方式每次运行它时,新文件必须以例如bps1.txt。如果我再次运行它应该以bps2.txt出现,依此类推。因此,例如,如果我运行批次3次,我会有bps.txt,bps1.txt,bps2.txt。

4 个答案:

答案 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

“重置”计数器

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