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

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

我怎么去做这个? 我见过的用于在批处理脚本中增加事物的解决scheme似乎并不适用于我的情况,除了我为自己的代码复制/粘贴之外,我不知道有关批处理脚本的任何内容。

Solutions Collecting From Web of "如何使用Windows批量增加文件夹名称?"

即使数字存在差距,这也是一种始终有效的解决方案。 文件夹号码总是比当前的最大号码大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%" 

这样你就可以计算出现“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 Batch是非常有限的,我是一个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开始或不:)创建新的文件夹希望你会喜欢!

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

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