【发布时间】:2018-07-28 14:47:44
【问题描述】:
我很难弄清楚为什么我的 .bat 文件会随机关闭...但我已将其范围缩小到:
IF %var:~-1%==\ SET var=%var:~0,-1%
IF %var:~0,1%==\ SET var=%var:~1%
理想情况下,我最终要完成的是从%var% 中删除任何前导或尾随斜杠或反斜杠,这是由用户输入设置的。
以上几行有效,但在 IF 语句中设置了setlocal EnableDelayedExpansion 并且变量也在IF 语句中设置时无效。
例如,如果我删除上述行,以下内容会起作用,否则会崩溃:
@echo off
setlocal EnableDelayedExpansion
set somevar=blah
if !somevar!==blah (
set /p var="-> "
IF %var:~-1%==\ SET var=%var:~0,-1%
IF %var:~0,1%==\ SET var=%var:~1%
echo !var!
)
pause
但是,如果我删除 IF 条件,它确实有效:
@echo off
setlocal EnableDelayedExpansion
set /p var="-> "
IF %var:~-1%==\ SET var=%var:~0,-1%
IF %var:~0,1%==\ SET var=%var:~1%
echo !var!
pause
如果我保留IF 语句但将set /p var="-> " 移到它之外,那么它也可以工作:
@echo off
setlocal EnableDelayedExpansion
set somevar=blah
set /p var="-> "
if !somevar!==blah (
IF %var:~-1%==\ SET var=%var:~0,-1%
IF %var:~0,1%==\ SET var=%var:~1%
echo !var!
)
pause
我知道,当启用延迟扩展时,我必须使用 ! 而不是 % 作为变量,但我已经尝试了这些行中的所有组合都无济于事,我不明白如何他们的工作足以进一步排除故障。
如果有更有效的方法来完成我所描述的,请务必提及。我对批量写作有点陌生。
【问题讨论】:
标签: windows batch-file command-line batch-processing