Разбить пакетную инструкцию If / ELSE на несколько строк - трудно читаемый код - PullRequest
0 голосов
/ 08 мая 2019

Я нашел этот код здесь -> :: Проверьте, является ли путь Файл или Папка, используя пакет

Но мне трудно читать и я хочу упростить / разбить его на части. Я не уверен, как это сделать, я попробовал ниже и несколько вариантов безрезультатно. Кто-нибудь может помочь? Спасибо!

Этот код работает:

@Echo Off
Set "ATTR=D:\Download\Documents\New"
For %%Z In ("%ATTR%") Do If "%%~aZ" GEq "d" (Echo Directory
) Else If "%%~aZ" GEq "-" (Echo File) Else Echo Inaccessible
Pause

Я бы хотел, чтобы это выглядело, но не могу понять:

@echo off

set "ATTR=%AppData%\Microsoft\Excel\XLSTART"

For %%Z In ("%ATTR%") Do If "%%~aZ" GEq "d" GoTo DIR
Else If "%%~aZ" GEq "-" GoTo FILE
Else GoTo NOTFOUND

:DIR
Echo "Dir Found!"
Pause

:FILE
Echo "File Found!"
Pause

:NOTFOUND
Echo "NOTHING FOUND!"
Pause

Ответы [ 2 ]

1 голос
/ 09 мая 2019

Взятие исходного кода в ссылку и добавление скобок помогает разбить структуру If и Else:

@Echo Off
For %%Z In ("%ATTR%") Do (
    If "%%~aZ" GEq "d" (
        Echo Directory
    ) Else (
        If "%%~aZ" GEq "-" (
            Echo File
        ) Else (
            Echo Inaccessible
        )
    )
)
Pause

Таким образом, чтобы изменить его на GoTo, возможно, что-то вроде этого больше подходит для ваших целей:

@Echo Off
PushD "%~dp0"
ClS
Set "ATTR=%AppData%\Microsoft\Excel\XLSTART"
For %%Z In ("%ATTR%") Do (
    If "%%~aZ" GEq "d" (
        GoTo DIR
    ) Else (
        If "%%~aZ" GEq "-" (
            GoTo FILE
        ) Else (
            GoTo NOACCESS
        )
    )
)
GoTo NOTFOUND

:DIR
Echo "Directory Found!"
GoTo ENDFOR

:FILE
Echo "File Found!"
GoTo ENDFOR

:NOTFOUND
Echo "Not Found!"
GoTo ENDFOR

:NOACCESS
Echo "Inaccessible!"

:ENDFOR
Pause
Exit /B
0 голосов
/ 09 мая 2019

Исправлено, если поместить в скобки GoTo Foo и сделать одну строку, которую, как мне показалось, легче читать, так как «ELSE» не может идти в отдельной строке.

@echo off
pushd %~dp0
cls
::https://stackoverflow.com/questions/47954081/check-if-the-path-is-file-or-folder-using-batch 

set "ATTR=%AppData%\Microsoft\Excel\XLSTART"

::For %%Z In ("%ATTR%") Do If "%%~aZ" GEq "d" (Echo Directory
::) Else If "%%~aZ" GEq "-" (Echo File) Else Echo Inaccessible
::Pause

For %%Z In ("%ATTR%") Do If "%%~aZ" GEq "d" (GoTo DIR) Else If "%%~aZ" GEq "-" (GoTo FILE) Else (GoTo NOTFOUND)

:DIR
Echo "Dir Found!"
Pause
GoTo ENDFOR

:FILE
Echo "File Found!"
Pause
GoTo ENDFOR

:NOTFOUND
Echo "NOTHING FOUND!"
Pause
GoTo ENDFOR

:ENDFOR
...