用于选择最新文件夹的批处理文件命令,除非特定名称

时间:2017-11-15 12:29:10

标签: batch-file

我们有一个批处理文件,用于根据在特定位置创建的最新文件夹的文件夹名称创建变量。随着该软件的较新版本的发布,版本号(文件夹名称)也将在此目录中创建10.0,10.1,10.2,10.3文件夹。到目前为止,这已经顺利完成,但是在上次更新中,他们决定在同一目录中添加一个名为Install的文件夹。

是否可以更改以下脚本以忽略Install文件夹,并选择最新创建的文件夹名称:

SET TABVER="C:\Program Files\Tableau\Tableau Server\"
FOR /F "delims=" %%i IN ('dir %TABVER% /b /ad-h /t:c /od') DO SET VERSION=%%i
SET TABCMD="C:\Program Files\Tableau\Tableau Server\%VERSION%\bin\tabcmd.exe"

1 个答案:

答案 0 :(得分:0)

可以使用此批处理代码:

set "TABVER=C:\Program Files\Tableau\Tableau Server\"
for /F "delims=" %%I in ('dir "%TABVER%" /B /AD-H /T:C /O-D 2^>nul') do if /I not "%%I" == "Install" set "VERSION=%%I" & goto FoundVersion

echo Error: There is no version subfolder in probably not already existing folder:
echo/
echo        %TABVER%
echo/
pause
goto :EOF

:FoundVersion
set TABCMD="%TABVER%%VERSION%\bin\tabcmd.exe"
rem Other commands using TABCMD

DIR 选项/od被修改为/O-D,以命令 DIR 以最新目录首先按相反顺序输出子目录列表最古老的目录。

附加的 IF 命令将当前目录名称不区分大小写与字符串Install进行比较。仅当目录名称 Install时,才会将目录名称分配给环境变量VERSION,并且退出循环而不处理所有其他目录名称并跳转到标签{{ 1}}。

我添加了一个错误输出,如果FoundVersion根本不存在,不包含子目录或仅包含C:\Program Files\Tableau\Tableau Server并停止批处理文件执行,直到用户按任意键然后退出批处理文件处理

另请阅读有关Using Command Redirection Operators的Microsoft文章,了解Install的说明。重定向运算符2>nul必须使用 FOR 命令行上的插入符>进行转义,以便在执行命令之前Windows命令解释程序处理此命令行时将其解释为文字字符FOR ,它在后台启动的单独命令进程中执行嵌入式^命令行。

另请参阅How to set environment variables with spaces?通常,最好使用命令行dir并使用set "variable=value"引用环境变量,而不是使用"%variable%"并引用环境变量只是set variable="value"。查看%variable%引用为什么没有为文件路径指定带双引号的环境变量。

要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。

  • %TABVER%
  • dir /?
  • for /?
  • goto /?
  • if /?
  • pause /?
  • rem /?

另请阅读single line with multiple commands using Windows batch fileWhere does GOTO :EOF return to?