我有一个简单的文件:
标签
home C:\Users\rodde
docs C:\Users\rodde\Documents
prev D:\
dt C:\Software\dt
第一列包含标签,第二列包含各自的目录。另外,我有一个程序(dt.exe
),它需要一个标签并将相应的目录打印到std::cout
。例如,dt.exe docs
将输出C:\Users\rodde\Documents
。最后,我有一个批处理脚本dt.bat
@echo off
if [%*] == 1 (
rem Once here, we have no arguments.
rem Chdir to the previous directory.
dt.exe prev > directory.tmp
set DIR=<directory.tmp
dt.exe --update-prev %cd%
cd %DIR%
) else if [%1] == [-l] (
dt.exe -l
) else if [%1] == [-s] (
dt.exe -s
) else if [%1] == [-L] (
dt.exe -L
) else if [%1] == [-S] (
dt.exe -S
) else if [%1] == [-d] (
dt.exe -d
) else (
rem Once here, we have a tag, so chdir
rem to respective directory
dt.exe %1 > directory.tmp
set DIR=<directory.tmp
cd %DIR%
)
不幸的是,这只能每4次左右运行一次。
我想念什么?
(dt.exe
的源代码是here。)
答案 0 :(得分:1)
我认为您的if语句定义不正确,因此您也不需要所有其他else语句。
@echo off
if [%*] == [] (
rem Once here, we have no arguments.
rem Chdir to the previous directory.
dt.exe prev > directory.tmp
set DIR=<directory.tmp
dt.exe --update-prev %cd%
cd %DIR%
) else (
if [%1] == [-l] dt.exe -l
if [%1] == [-s] dt.exe -s
if [%1] == [-L] dt.exe -L
if [%1] == [-S] dt.exe -S
if [%1] == [-d] dt.exe -d
) else (
rem Once here, we have a tag, so chdir
rem to respective directory
dt.exe %1 > directory.tmp
set DIR=<directory.tmp
cd %DIR%
)
但是,这是非常乏味且不需要的。为什么不简单地用一条语句替换所有if else:
dt.exe %~1
因此,我们可以通过检查%~1
是否有效进行测试,如果无效,请退出,如果是,请执行:
if "%~1"=="" exit || dt.exe %~1
无论您输入什么内容,它都会运行它,除非为空。显然,您可以将exit
替换为其他命令。