如何使用Windows批处理增加文件夹名称?

时间:2012-11-11 03:50:59

标签: windows batch-file

我有一个批处理脚本,可以创建一个名为New_Folder的文件夹以及一些子目录和文件。目前,如果我需要创建多个New_Folders,我必须重命名该批处理创建的每个New_Folder,然后才能再次运行它并创建一个新的。我想做的是进行批量检查,看看New_Folder是否已经存在,如果是,则将New_Folder增加一个数字。所以我有New_Folder,New_Folder1,New_Folder2等等。

我该怎么做呢?我看到用于在批处理脚本中增加内容的解决方案似乎不适用于我的情况,除了我为自己的代码复制/粘贴的内容之外,我对批处理脚本没有任何了解。

3 个答案:

答案 0 :(得分:6)

这是一个始终有效的解决方案,即使数字存在差距。文件夹编号将始终比当前最大编号大1。

@echo off
setlocal enableDelayedExpansion
set "baseName=New_Folder"
set "n=0"
for /f "delims=" %%F in (
  '2^>nul dir /b /ad "%baseName%*."^|findstr /xri "%baseName%[0-9]*"'
) do (
  set "name=%%F"
  set "name=!name:*%baseName%=!"
  if !name! gtr !n! set "n=!name!"
)
set /a n+=1
md "%baseName%%n%"

答案 1 :(得分:3)

你可以计算出“New_Folder *”的出现次数,并用下一个数字创建一个。

@echo off
set /a count=0

for /d %%d in (New_Folder*) do (
    set /a count+=1
)

set /a count+=1

mkdir New_Folder%count%

请注意,最好的方法是查找 New_Folder末尾的最大数字,但Windows批处理是非常有限的,我是Linux人员!

编辑:经过约一小时的谷歌搜索和测试:

@echo off

setlocal EnableDelayedExpansion

set max_number=0

for /d %%d in (New_Folder*) do (
    set current_directory=%%~nxd

    call:StrLength name_length !current_directory!
    call:Substring directory_number,!current_directory!,10,!name_length!

    if !directory_number! gtr !max_number! (
        set max_number=!directory_number!
    )
)

set /a max_number+=1

mkdir New_Folder%max_number%

:Substring
::Substring(retVal,string,startIndex,length)
:: extracts the substring from string starting at startIndex for the specified length 
 SET string=%2%
 SET startIndex=%3%
 SET length=%4%

 if "%4" == "0" goto :noLength
 CALL SET _substring=%%string:~%startIndex%,%length%%%
 goto :substringResult
 :noLength
 CALL SET _substring=%%string:~%startIndex%%%
 :substringResult
 set "%~1=%_substring%"
GOTO :EOF

:StrLength
::StrLength(retVal,string)
::returns the length of the string specified in %2 and stores it in %1
set #=%2%
set length=0
:stringLengthLoop
if defined # (set #=%#:~1%&set /A length += 1&goto stringLengthLoop)
::echo the string is %length% characters long!
set "%~1=%length%"
GOTO :EOF

注意,命令行返回错误“命令的语法不正确”。但一切正常,所以我会让你找到原因......无论目录的顺序如何,或者如果它们从1开始,都会创建新文件夹:)希望你会喜欢!

答案 2 :(得分:2)

此解决方案找到编号最大的名称,并为其创建下一个名称:

@echo off
for /d %%d in (New_Folder*) do set lastFolder=%%d
set /A nextFolder=%lastFolder:*New_Folder=% + 1
mkdir New_Folder%nextFolder%

编辑: 以前的解决方案无法正确获取最后编号的文件夹,但下一个解决方案是正确的:

@echo off
setlocal EnableDelayedExpansion
set lastFolder=0
for /d %%d in (New_Folder*) do (
   set folder=%%d
   set folder=!folder:New_Folder=!
   if not defined folder set folder=0
   if !folder! gtr !lastFolder! set lastFolder=!folder!
)
set /A nextFolder=lastFolder+1
mkdir New_folder%nextFolder%