If statement 批次:如果..那么..否则我会生气
我写了一个带有if..else嵌套的子程序 不幸的是,我不明白为什么我的代码在“ELSE”前后执行(!!) 我读了好几个小时,但没有发现任何错误。。你能帮助我吗? 我复制了代码(进行了大量的echo调试)和输出 这是我的小代码:If statement 批次:如果..那么..否则我会生气,if-statement,batch-file,nested-if,If Statement,Batch File,Nested If,我写了一个带有if..else嵌套的子程序 不幸的是,我不明白为什么我的代码在“ELSE”前后执行(!!) 我读了好几个小时,但没有发现任何错误。。你能帮助我吗? 我复制了代码(进行了大量的echo调试)和输出 这是我的小代码: setlocal set debug=echo %debug% # %~0: %* for /f "usebackq tokens=1-3 delims=;" %%a in ('"%*"') do (set dir=%%~a& set own=%%
setlocal
set debug=echo
%debug% # %~0: %*
for /f "usebackq tokens=1-3 delims=;" %%a in ('"%*"') do (set dir=%%~a& set own=%%~b)
%debug% - dir="!dir!"
%debug% - own="!own!"
%debug% -+ analisi cartella: "!dir!"
if exist "!dir!" (
%debug% x la cartella esiste già, passo oltre
) else (
%debug% - la cartella non esite quindi la creo
mkdir "!dir!" || echo [E] non sono riuscito a creare la cartella&& echo %err3_txt% [dir:!dir!] 1>&2 && exit %err3_id%
)
%debug% -+ analisi proprietario: "!own!"
for /f "usebackq tokens=1,2 delims=\" %%x in ('"!own!\\"') do (set own1=%%~x& set own2=%%~y)
if [!own!] equ [!own:~0,1! ] (
%debug% x il proprietario non è stato specificato quindi non va cambiato, passo oltre
) else (
%debug% - own1: "!own1!"
%debug% - own2: "!own2!"
if [%own2%] equ [] (
%debug% - il proprietario ha un dominio implicito, lo calcolo
set ownn=%own1%
set ownd=%userdomain%
) else (
%debug% - il proprietario ha un dominio esplicitamente indicato
set ownd="input non valido"
if /i [!own1!] equ [L] set ownd=%computername%
if /i [!own1!] equ [D] set ownd=%userdomain%
if "%ownd%" equ "input non valido" (echo [E] il dominio esplitamente indicato non è riconosciuto: !own1!& echo %err4_txt% [dir:!dir!][own:!own!] 1>&2 & exit %err4_id%)
)
%debug% - la configurazione prevede l'impostazione del seguente proprietario: !ownd!\!ownn!
)
%debug% x done.
这是我的输出:
# :CSG_check_fs: C:; ;
- dir="C:"
- own=" "
-+ analisi cartella: "C:"
x la cartella esiste giÓ, passo oltre
-+ analisi proprietario: " "
x il proprietario non Þ stato specificato quindi non va cambiato, passo oltre
- own1: " "
- own2: ""
- il proprietario ha un dominio implicito, lo calcolo
- la configurazione prevede l'impostazione del seguente proprietario: CSG\
x done.
特别是,让我们在else子句之前和之后执行适当的命令!!!
为什么?这件事太不可思议了!!还是我太累了?在我看来,这可能并不完美,但请记住,这里没有除虫服务&我不是你父亲,卢克
@ echo off&setlocal
for /f "usebackq tokens=1-3 delims=;" %%a in ("%*") do (set dir=%%~a& set own=%%~b)
if not exist "%dir%" mkdir "%dir%" || echo [E] non sono riuscito a creare la cartella&& echo %err3_txt% [dir:%dir%]&& exit %err3_id%
for /f "usebackq tokens=1,2 delims=\" %%x in ("%own%\\") do (set own1=%%~x& set own2=%%~y)
if not [%own%] equ [%own:~0,1%] (
if [%own2%] equ [] (
set ownn=%own1%
set ownd=%userdomain%
) else (
set "ownd=input non valido"
if /i [%own1%] equ [L] set ownd=%computername%
if /i [%own1%] equ [D] set ownd=%userdomain%
if "%ownd%" equ "input non valido" (echo [E] il dominio esplitamente indicato non è riconosciuto: %own1%& echo %err4_txt% [dir:%dir%][own:%own%]& exit %err4_id%)
)
)
这当然很奇怪。CMD似乎在这个非常复杂的语句中遇到了一个真正的问题(我也是……): 看着
if [!own!] equ [!own:~0,1! ] (
您可能认为应该对其进行评估,将OWN
设置为单个空格,如下所示:
if [ ] equ [ ] (
这将生成语法错误,因为命令中的第三个标记是]
,而该标记不是有效的比较运算符。!瓦尔代码>混淆了这一点,因为直到执行时才可以对其进行计算——到那时,解析器已经完成了它的工作
正确的形式是
if "%own%" equ "%own:~0,1% " (
因为解析器随后可以替换own
的当前(即PARSE-TIME)值,并且语法是“quoted string”运算符“另一个quoted string”
我相信这一改变将解决问题的主要部分
同样地
if [%own2%] equ [] (
应该是
if "%own2%" equ "" (
甚至(我的偏好)
- 另一个
IF[…]eq[…]构造也是如此
最后,在序列中
set ownd="input non valido"
if /i [!own1!] equ [L] set ownd=%computername%
if /i [!own1!] equ [D] set ownd=%userdomain%
if "%ownd%" equ "input non valido" (echo [E] il dominio ...
有一个小问题(除了if.[…
ownd
可以在代码中设置,但是最后一行中的%ownd%
将替换ownd
的解析时间值,因此它不太可能包含目标字符串。这里是您需要!var!
的地方,因为var
的值正在被代码,您希望更改值,而不是解析语句时的值
HTH试着小声点,有人可能会误认为这是一句咆哮。在我看来,你应该杀掉所有%debug%行&代码将运行:)是的!用“”替换[]很有效!!非常感谢
if not defined own2
set ownd="input non valido"
if /i [!own1!] equ [L] set ownd=%computername%
if /i [!own1!] equ [D] set ownd=%userdomain%
if "%ownd%" equ "input non valido" (echo [E] il dominio ...