在过去,我通过搜索StackOverflow的讨论历史找到了很多解决方案,然而,我被这个批处理文件卡住了,(因为Windows脚本不是我通常做的事情)。
当前目录包含许多子文件夹(实际上有数千个),请参见以下示例:
18.01.2023 10:05 <DIR> .
18.01.2023 08:49 <DIR> ..
18.01.2023 10:02 <DIR> 1-Lion
18.01.2023 10:02 <DIR> 2-Fox
18.01.2023 10:03 <DIR> 126-Orion (prior folders deleted)
18.01.2023 10:03 <DIR> 127-Future
18.01.2023 10:05 <DIR> Random folder without prefix
18.01.2023 10:01 708 test.bat
1 Datei(en), 708 Bytes
7 Verzeichnis(se),
因此,在上例中,下一个项目应具有前缀128
。
我希望脚本检查所有现有文件夹的数字前缀。这些前缀可以是1
到99999
,即最多五个数字字符,并通过字符-
与名称的其余部分分隔。(某些文件夹可能没有任何数字前缀,应忽略这些前缀)。
然后,脚本应该创建一个新文件夹,并将下一个"可用"前缀作为项目编号。
下面是我的尝试:
@echo off
setlocal enabledelayedexpansion
rem Set initial value for MaxPrefix variable
set MaxPrefix=0
rem Check all existing folders in current directory
for /D %%F in (*) do (
rem Check if folder name has numeric prefix
for /F "tokens=1 delims=-" %%P in ("%%F") do (
rem Check if prefix is higher than current MaxPrefix value
if %%P GTR %MaxPrefix% set MaxPrefix=%%P
)
)
rem Ask for new project name
set /p projectname=Enter new project name:
rem Reject input if empty
if "%projectname%" == "" (
echo Invalid input, project name cannot be empty.
pause
exit
)
rem Check if project name already exists as folder label
for /D %%F in (*) do (
for /F "tokens=2 delims=-" %%P in ("%%F") do (
if /I "%%P" == "%projectname%" (
echo Project already exists with project number %MaxPrefix%.
pause
exit
)
)
)
rem Create new folder with incremented MaxPrefix and project name
set /a newprefix=%MaxPrefix% + 1
md %newprefix%-%projectname%
echo New project created with project number %newprefix%.
pause
我的前缀"检测"方法似乎不起作用,因此正确的创建也失败了。
2条答案
按热度按时间t3psigkw1#
注意,这个例程只计算下一个前缀。
列出目录,抓取
-
前面的名称部分,用引号引起来并传递给:process
。在
:process
中,用9
作为传递字符串的前缀,然后删除每个数字。如果结果是字符串不为空,则字符串中存在其他字符,因此忽略它。否则,如果字符串的值〉= current next-value,则将next-value设置为比字符串的值大1。
9
作为字符串的前缀,以便字符串在最后一次替换之前不会变为空。qxsslcnc2#
因此,感谢Magoo我得到了我的批处理工作。我张贴下面的编辑代码,也许有人用它。再次感谢!