我这里有一个问题想要解决。
假设场景如下:
在 BuildFolder 中有以下文件:
Z:\BuildFolder\Build#170
Z:\BuildFolder\Build#171
Z:\BuildFolder\Build#172
Z:\BuildFolder\Build#173
Z:\BuildFolder\Build#174
Z:\BuildFolder\Changelog
Z:\BuildFolder\Misc
我想要在批处理文件中实现的功能是:
循环目录并仅获取以 Build#xxx 开头的目录。我通过使用以下方法实现了此目的
for /D %%s in (.\Build#*) do @echo %%s
如何获取 Build Folder 的最后一个索引,例如知道要创建的下一个目录是 Build#175 ?
答案1
您可能可以在循环本身中添加一行来预测索引的下一个值可能是什么(假设它总是以 1 为增量)。
我在下面附上了代码片段
在脚本的最开始处添加以下行
setlocal EnableDelayedExpansion
然后修改循环,如下所示。假设文件夹始终命名为建造#。因此它跳过前 6 个字符来获取索引值。最后打印获取的值 +1。最后获取的值将是最高索引
FOR /D %%s in (".\Build#*") do (
set name=%%~ns
set /a index=!name:~6!
)
set /a nextindex=!index!+1
ECHO next folder is %nextindex%
pause
答案2
Powershell(正如Julian Knight所建议的):
PS C:\Users\user\Desktop\tmp> Get-ChildItem -Filter 'Build#*'
Directory: C:\Users\user\Desktop\tmp
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 30.03.2015 14:19 Build#170
d---- 30.03.2015 14:19 Build#171
d---- 30.03.2015 14:19 Build#172
d---- 30.03.2015 14:19 Build#173
d---- 30.03.2015 14:19 Build#174
PS C:\Users\user\Desktop\tmp> Get-ChildItem -Filter 'Build#*' | select -Last 1
Directory: C:\Users\user\Desktop\tmp
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 30.03.2015 14:19 Build#174
PS C:\Users\user\Desktop\tmp> Get-ChildItem -Filter 'Build#*' | select -Last 1 | format-list *
PSPath : Microsoft.PowerShell.Core\FileSystem::C:\Users\user\Desktop
\tmp\Build#174
PSParentPath : Microsoft.PowerShell.Core\FileSystem::C:\Users\user\Desktop
\tmp
PSChildName : Build#174
PSDrive : C
PSProvider : Microsoft.PowerShell.Core\FileSystem
PSIsContainer : True
BaseName : Build#174
Mode : d----
Name : Build#174
Parent : tmp
Exists : True
Root : C:\
FullName : C:\Users\user\Desktop\tmp\Build#174
Extension :
CreationTime : 30.03.2015 14:19:36
CreationTimeUtc : 30.03.2015 12:19:36
LastAccessTime : 30.03.2015 14:19:36
LastAccessTimeUtc : 30.03.2015 12:19:36
LastWriteTime : 30.03.2015 14:19:36
LastWriteTimeUtc : 30.03.2015 12:19:36
Attributes : Directory
PS C:\Users\xnem\Desktop\tmp>