簡體   English   中英

如何為Windows腳本創建唯一的輸出文件名?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM