如果已存在同名的编号文件夹,则使用批处理文件创建该文件夹

如果已存在同名的编号文件夹,则使用批处理文件创建该文件夹

我目前正在编写一个 Windows 批处理文件,它需要检查是否存在具有当前计算机名称的文件夹。如果不存在,它会写入具有名称的文件夹,但如果已经存在,它会在末尾附加一个数字,这样最后我就会得到一个包含如下文件夹名称的文件夹

G:\logs\computer-1
G:\logs\computer-2
G:\logs\computer-3
G:\logs\...

到目前为止,我尝试使用这段代码

set usb=G:
SET logdir="%usb%\logs\%computername%"
FOR /L %%F IN (1,1,25) DO (
IF NOT EXIST "%usb%\logs\%computername%-%%F" (
md "%usb%\logs\%computername%-%%F"
SET logdir=%usb%\logs\%computername%-%%F)
goto :eof
)
ECHO %logdir%

但我所能做的只是退出循环,这不是我想要做的事。

答案1

setlocal

set dir=G:\logs\%computername%

set n=0
md "%dir%"||call :a %n%

rem rest of your script    

exit

rem the a label is set after the exit function to prevent it from
rem running in the actual script when it's not required.

:a
set /a n+=1
md "%dir%-%n%"||goto a
exit /b

该脚本将按照您描述的方式创建编号文件夹。

在批处理中, 的语法为setset "foo=bar"当变量包含语法破坏字符(如 & 或 |)时,必须使用引号。声明变量时,空格不需要使用引号。set foo="bar"将 foo 设置为"bar"

答案2

选项 1 - 一次创建所有文件夹

根据您问题的起始代码,这将生成一个扩展名为(1 到最大限度)如果它在一次调用中不存在:

SET usb=G:

SET logdir="%usb%\logs"

SET max=25

FOR /L %%F IN (1,1,%max%) DO (
    IF NOT EXIST "%logdir%\%computername%-%%F" ( 
    md "%logdir%\%computername%-%%F")
    )

前任。

一次性批量创建文件夹示例

选项 2 - 逐步创建文件夹

作为第二种选择,以下解决方案将在每次调用时添加一次增量文件扩展名(基于目录中的文件夹总数)。同样,它会忽略现有文件夹:

SET usb=G:

SET logdir="%usb%\logs"

FOR /f %%A IN ('dir /b /ad %logdir%^|find /c /v "" ') DO SET fcount=%%A

SET /a fcount+=1

IF NOT EXIST "%logdir%\%computername%-%%A" (
    MD "%logdir%\%computername%-%fcount%")

前任。

每次通话创建一次批处理文件夹的示例

注意事项

  • 第一个解决方案是总是制作文件夹 1 至最大限度

  • 第二种解决方案的缺点是它使用目录中的文件夹总数。因此,虽然它会生成具有数字扩展名的类似名称的文件夹,但真正的无间隙有序序列(即 -1、-2、-3、-4...)需要:

    • 目录中的所有文件夹名称都需要相同。
    • 任何其他文件夹(例如手动添加的文件夹)都保留此顺序(即如果计算机-6存在,则下一个手动添加的文件夹必须是计算机-7)。

相关内容