2014-03-02 40 views

回答

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

+0

我试过这个,但不幸的是,它只给了我一个文件名“a”,没有更多:(我正在寻找的东西,会给我这在第一次运行:** filename1 **,这在第二**文件名2 ** – endlesslearning

+0

这工作得很好,但我想知道我可以把** .txt **放在哪里,因为我希望这个文件是一个文本文件。谢谢! – endlesslearning

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%" 
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 

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

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 
相关问题