gpt4 book ai didi

batch-file - 根据同名的现有文件夹创建一个编号递增的文件夹

转载 作者:行者123 更新时间:2023-12-04 15:43:20 24 4
gpt4 key购买 nike

我想制作一个批处理文件,当已经存在同名文件夹时,该文件会创建一个编号递增的文件夹。

例如,对于名为 folder 的文件夹,如下所示:

if exist folder md folder1 if exist folder1 md folder2

我想要的是,当已经有 1 个或多个同名文件夹(folder1、folder2、...)时,创建另一个文件夹,并在末尾添加一个递增的数字,并使代码更短。

最佳答案

这个批处理代码是基于您最初的想法:

@echo off
set "Folder=C:\Temp\Test"
if not exist "%Folder%" (
md "%Folder%"
goto EndBatch
)
for /L %%N in (1 1 65534) do (
if not exist "%Folder%%%N" (
md "%Folder%%%N"
goto EndBatch
)
)
:EndBatch
set "Folder="

但是这个解决方案非常慢,因为已经存在多个文件夹。

以下批处理文件要快得多:

@echo off
set "Folder=C:\Temp\Test"
if not exist "%Folder%" (
md "%Folder%"
goto EndBatch
)
set "FolderCount=0"
for /F "delims=" %%F in ('dir /AD /B "%Folder%*"') do set /A FolderCount+=1
md "%Folder%%FolderCount%"
set "FolderCount="
:EndBatch
set "Folder="

但是这个批处理文件并没有真正检查文件夹名称。它只是计算以相同字符串开头的文件夹数量,并期望对于新文件夹可以使用下一个数字。这可能是一个错误的假设,例如 C:\Temp\Test1删除并C:\Temp\TestC:\Temp\Test2仍然存在。上面的批处理文件仍然尝试创建 C:\Temp\Test2在这种情况下。

因此,更好的批处理文件是这个:

@echo off
setlocal EnableDelayedExpansion
set "ParentFolder=C:\Temp"
set "FolderName=Test"
if not exist "%ParentFolder%\%FolderName%" (
md "%ParentFolder%\%FolderName%"
) else (
set "HighestNumber=0"
for /F "delims=" %%F in ('dir /AD /B "%ParentFolder%\%FolderName%*"') do (
set "NameFolder=%%~F"
set "FolderNumber=!NameFolder:%FolderName%=!"
if !FolderNumber! GTR !HighestNumber! set "HighestNumber=!FolderNumber!"
)
set /A HighestNumber+=1
md "%ParentFolder%\%FolderName%!HighestNumber!"
)
endlocal

它也很快,因为也不检查每个文件夹是否存在。但它确实找出以相同字符串开头的所有文件夹中最大的编号,并使用下一个编号创建一个新文件夹。

注 1:此批处理代码也不是 100% 故障安全。例如文件夹 C:\Temp\Test_New_15对于这个批处理文件来说可能是一个问题,只需要 C:\Temp\Test ,C:\Temp\Test1 , C:\Temp\Test2 ,...被发现。 ( Test_New_15 被忽略,但类似的东西可能会成为问题。)当然可以消除这个问题,例如额外使用 findstrdir 返回的每一行上检查 FolderName 定义的字符串后是否只附加了数字。

注释 2:0 开头的文件夹编号被解释为八进制数字。如果 if 之前的 FolderNumber 值上有 1 个或多个前导 0 的文件夹,则有必要删除前导零。情况。

要了解 3 个批处理文件中的代码,请打开命令提示符窗口,执行以下命令,并阅读窗口中每个命令的帮助输出。

  1. dir /?
  2. for /?
  3. goto /?
  4. if /?
  5. md /?
  6. set /?
  7. setlocal /?

关于batch-file - 根据同名的现有文件夹创建一个编号递增的文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28781921/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com