所以基本上我有這個批處理文件:通過創建一批新的文件,而不會覆蓋舊的
@echo off bps -f bps.txt exit
每次我運行該批處理新bps.txt文件覆蓋舊的。我想要的是每次運行它時,新文件必須出來,例如, bps1.txt。如果我再次運行它應該出現bps2.txt等。所以例如,如果我運行批次3次,我會有bps.txt,bps1.txt,bps2.txt。
所以基本上我有這個批處理文件:通過創建一批新的文件,而不會覆蓋舊的
@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
你可以這樣做:
@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
循環非常耗時。如果你想到的是,文件名是連續創造了你可以做這樣的:
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
我也是這麼想的。但是,如果某些文件被刪除(因爲它們是舊的)呢?此解決方案可能會覆蓋現有文件中的一個,而不是創建新文件。 (可能會也可能不是問題) – Stephan
它有助於確定最高的文件編號加上一個作爲下一個枚舉嗎?這會留下缺口,但這可能是需要的。 – user1016274
因爲文件按字母順序列出(1.10,11。,19,2,20,21,...),所以很難。替代方法:'dir/od'(最新的文件_應該是數字最高的文件,但在此期間編輯文件時不再這麼做)。 – Stephan
我previous answer採取的第一個「免費」反 - 如果你刪除一些「舊」的文件,這將填補國內空白的新文件。
另一種方式(有點不尋常,但有效):使用替代數據流來「保存」計數器。爲每個實例添加+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
(注:不檢查,如果該文件存在)
我必須說,這是比我的回答更優雅。 –