繁体   English   中英

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

[英]How do I increment a folder name using Windows batch?

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM