我想创建一个Windows脚本,每次运行它时应该生成这种类型的文件名:filename1,filename2,filename3等等。这是我到目前为止:如何为Windows脚本创建唯一的输出文件名?
(
@echo off
wmic logicaldisk get size,freespace,caption
) > disk.txt
我希望你能帮助我。谢谢!!
我想创建一个Windows脚本,每次运行它时应该生成这种类型的文件名:filename1,filename2,filename3等等。这是我到目前为止:如何为Windows脚本创建唯一的输出文件名?
(
@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
我试过这个,但不幸的是,它只给了我一个文件名“a”,没有更多:(我正在寻找的东西,会给我这在第一次运行:** filename1 **,这在第二**文件名2 ** – endlesslearning
这工作得很好,但我想知道我可以把** .txt **放在哪里,因为我希望这个文件是一个文本文件。谢谢! – endlesslearning