如何为Windows脚本创建唯一的输出文件名?

时间:2014-03-02 14:02:11

标签: windows loops batch-file scripting

我正在尝试创建一个Windows脚本,每次运行时都会生成这种文件名:filename1,filename2,filename3等等。以下是我到目前为止的情况:

(
@echo off
wmic logicaldisk get size,freespace,caption
) > disk.txt

我希望你能帮助我。谢谢!

4 个答案:

答案 0 :(得分:1)

:: 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

答案 1 :(得分:0)

这将为您提供最多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%"

答案 2 :(得分:0)

@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

将采用最新创建的文件集实例。

答案 3 :(得分:0)

我终于找到了放置.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