![](/img/trans.png)
[英]Windows batch script: how to extract only th filename from a ftype command output
[英]How to create a unique output filename for Windows Script?
我正在嘗試創建一個Windows腳本,該腳本應在每次運行它時都生成這種文件名:filename1,filename2,filename3等。 這是我到目前為止的內容:
(
@echo off
wmic logicaldisk get size,freespace,caption
) > disk.txt
我希望你能幫助我。 謝謝!!
:: make a tempfile
:maketemp
SET "tempfile=%temp%\%random%"
IF EXIST "%tempfile%*" (GOTO maketemp) ELSE (ECHO.>"%tempfile%a")
現在,您可以使用任意數量的文件名。
%tempfile%a
存在並且為空,但是%tempfile%anythingelse
應該可以使用。
@ECHO OFF
SETLOCAL
SET "basename=filename"
SET /a outname=0
:genloop
SET /a outname+=1
IF EXIST "%basename% %outname%.txt" GOTO genloop
SET "outname=%basename% %outname%.txt"
ECHO %outname%
GOTO :EOF
啊-每次運行都增加目標文件名。 這應該做到這一點。 它實際上不是在創建文件-您每次都需要創建%outname%
文件才能使其遞增...
( %basename%
和%outname%
之間的空格是可選的,當然-如果需要,可以省略。)
編輯為包含.txt
這將為您提供多達1000個文件名,但您可以將文件名設置為更高,最多20億個,但是您選擇的文件名越高,延遲時間就越長。
@echo off
for /L %%a in (1,1,1000) do if not defined filename if not exist "filename%%a.txt" set "filename=filename%%a.txt"
(
wmic logicaldisk get size,freespace,caption
) > "%filename%"
@echo off
setlocal enableextensions
call :getNextFilename "filename*.txt" nextFilename
echo %nextFilename%
echo test > "%nextFilename%"
call :getNextFilename "%cd%\filename*.txt" nextFilename
echo %nextFilename%
echo test > "%nextFilename%"
endlocal
exit /b
:getNextFilename whatToSearch returnVariable
setlocal enableextensions enabledelayedexpansion
for /f %%a in ("$\%~1"
) do for /f "tokens=1,* delims=*" %%b in ("%%~nxa"
) do ( set "left=%%b" & set "right=%%c" )
set "max=0"
for %%a in ("%~1"
) do for /f "tokens=1 delims=%left%%right% " %%b in ("%%~nxa"
) do for /f "tokens=* delims=0 " %%c in ("0%%~b"
) do if %%~c geq !max! set /a "max=%%c+1"
endlocal & set "%~2=%~dp1%left%%max%%right%" & exit /b
這應該順序查找下一個文件,而與文件計數中是否存在孔無關。 可以包含或省略路徑。 *
將用作計算的占位符。 但是,如果文件或包含的路徑具有“有問題的”字符,則此方法將不起作用。
如果可以考慮創建文件的日期/時間,則可以將該版本優化為
:getNextFilename whatToSearch returnVariable
setlocal enableextensions disabledelayedexpansion
for /f %%a in ("$\%~1"
) do for /f "tokens=1,* delims=*?" %%b in ("%%~nxa"
) do ( set "left=%%b" & set "right=%%c" )
set "max=0"
for /f "delims=" %%a in ('dir /tc /o-d /b "%~1" 2^>nul'
) do for /f "tokens=1 delims=%left%%right% " %%b in ("%%~nxa"
) do for /f "tokens=* delims=0 " %%c in ("0%%~b"
) do set /a "max=%%c+1" & goto done
:done
endlocal & set "%~2=%~dp1%left%%max%%right%" & exit /b
將采用文件集的最新創建實例。
我終於弄清楚了.txt擴展名的位置。 這是來自@Magoo的答案,但我希望該文件為文本文件,因此我兩次放置.txt以便其正常工作。
@ECHO OFF
SETLOCAL
SET "basename=DISK-OUT"
SET /a outname=0
:genloop
SET /a outname+=1
IF EXIST "%basename% %outname%.txt" GOTO genloop
SET "outname=%basename% %outname%.txt"
(
wmic logicaldisk get size,freespace,caption
) > "%outname%"
GOTO :EOF
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.