Невозможно перейти в каталог, возвращенный программой exe - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть этот простой файл:

теги

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

К сожалению, это работает только каждый четвертый раз или около того.

Чего мне не хватает?

(Источниккод для dt.exe - здесь .)

1 Ответ

0 голосов
/ 22 ноября 2018

Я полагаю, что ваши операторы if определены неправильно, вам не нужны все остальные операторы .. так что для начала:

@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 если еще одним оператором:

dt.exe %~1

Таким образом, мы можем проверить, проверив, действительно ли %~1 допустим или нет, если нет, завершить, если это так, выполнить:

if "%~1"=="" exit || dt.exe %~1

Не важно, какой у вас ввод, он будет запускаться, если только он не пустой.Очевидно, вы можете заменить exit другими командами.

...