我正在尝试创建一个Windows脚本,每次运行时都会生成这种文件名:filename1,filename2,filename3等等。以下是我到目前为止的情况:
(
@echo off
wmic logicaldisk get size,freespace,caption
) > disk.txt
我希望你能帮助我。谢谢!
答案 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