无法CD到exe程序返回的目录

时间:2018-11-22 06:25:33

标签: windows batch-file cd

我有一个简单的文件:

标签

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。)

1 个答案:

答案 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替换为其他命令。