如标题所示,我想知道是否可以通过验证位于同一文件夹中的其他文件来命名.txt文件...
甚至在创建我的新文件之前,我都尝试过此操作,但是由于出现错误The system cannot find the file specified.
,即使以后再定义它,也无法使用Traces!i!.txt
作为变量,所以它不起作用:
@Echo Off
SETLOCAL EnableDelayedExpansion
Set dir=C:\...\myFolder\
Set /A i=1
for /f %%a in ('dir %dir%Traces*.txt /b') do (
Set file=%%a
Set /A result=!i! - !file:~6,-4!
If "!result:~0,1!"=="-" ( Set /A i=!file:~6,-4! + 1 )
If "!result:~0,1!"=="0" ( Set /A i=!i! + 1 )
)
Echo Traces!i!.txt
ENDLOCAL
pause
而且,有没有办法让我最终选择的名称作为变量?
我希望文件夹中的文件看起来像:
list1.txt list2.txt list3.txt
下一次创建新文件时,其名称应该为list4.txt
,所以我需要一个程序来像我之前所说的那样实际检查其他文件。
@echo off
setlocal
set "dir=C:\...\myFolder\"
set "i=0"
:get_filename
Set /a "i+=1"
if exist "%dir%Traces%i%.txt" goto :get_filename
set "filename=Traces%i%.txt"
echo "%dir%%filename%"
endlocal
pause
仅可以使用goto
标签循环获取索引文件名。一旦找不到第一个索引文件名,就将filename
设置为可用于创建索引文件名的值。
如果数字后缀始终是连续的,则可以对文件名进行排序,以便可以检索最大的数字。由于批处理脚本只能进行纯字母排序,因此您需要在数字后缀左边加零以得到固定的宽度,然后按与字母数字一相同的顺序进行字母排序。
这里是我的意思的示例:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
rem // Define constants here:
set "_TARGET=D:\path\to\target\dir" & rem // (path to the target directory)
set "_PREFIX=Traces" & rem // (constant file name prefix)
set "_EXT=.txt" & rem // (file name extension with `.`)
set "_TEMPF=%TEMP%\%~n0_%RANDOM%.tmp" & rem // (path to a temporary file)
rem // Change into target directory:
pushd "%_TARGET%" && (
rem // Write to temporary file:
> "%_TEMPF%" (
rem // Loop through all matching file names:
for /F "delims= eol=|" %%F in ('dir /B /A:-D "%_PREFIX%*%EXT%"') do (
rem // Store current base file name:
set "NAME=%%~nF"
rem // Toggle delayed expansion to avoid loss of `!`:
setlocal EnableDelayedExpansion
rem // Remove prefix from base file name, pad number with 10 zeros:
set "NUM=!NAME:*%_PREFIX%=!" & set "PAD=0000000000!NUM!"
rem // Return 10-digit number plus `|` plus original number (suffix):
echo(!PAD:~-10!^|!NUM!
endlocal
)
)
rem // Restore previous working directory:
popd
)
rem // Reset variable that will receive the resulting highest number (suffix):
set "ITEM="
for /F "tokens=2 delims=| eol=|" %%E in ('sort "%_TEMPF%"') do (
set "ITEM=%%E"
)
rem // Clean up temporary file:
del "%_TEMPF%"
rem // Check whether there were matching files:
if defined ITEM (
rem // Increment found highest number:
set /A "ITEM+=1"
rem // Return next free file path and name:
setlocal EnableDelayedExpansion
echo(!_TARGET!\%_PREFIX%!ITEM!%_EXT%
endlocal
)
endlocal
exit /B