Windows “如何生存”;延迟变量扩展“;在DOS批处理脚本中
这是我的剧本:Windows “如何生存”;延迟变量扩展“;在DOS批处理脚本中,windows,batch-file,Windows,Batch File,这是我的剧本: @echo off setlocal for /f %%i in ('echo aaa/') do set REPO=%%i if "%REPO%"=="" ( echo No input ) else ( echo %REPO:~-1% echo %REPO:~0,-1% if %REPO:~-1%==/ set REPO=%REPO:~0,-1% echo %REPO% ) endlocal 请注意: c:\dev\shunra\GlobalLibr
@echo off
setlocal
for /f %%i in ('echo aaa/') do set REPO=%%i
if "%REPO%"=="" (
echo No input
) else (
echo %REPO:~-1%
echo %REPO:~0,-1%
if %REPO:~-1%==/ set REPO=%REPO:~0,-1%
echo %REPO%
)
endlocal
请注意:
c:\dev\shunra\GlobalLibrary\Server>c:\Utils\hgbackup.cmd
/
aaa
aaa/
c:\dev\shunra\GlobalLibrary\Server>
发生了什么事
编辑
请注意,我给回购分配了一些计算结果为“aaa”的内容,因此我希望它打印“aaa”,而不是“aaa/”。这让我发疯
EDIT2
显然,罪魁祸首(来自set命令的帮助):
但是我试过使用代码>符号,但它对我仍然不起作用。我使用get代码>打印在屏幕上或再次出现错误结果
请注意,我给回购分配了一些计算结果为“aaa”的内容
实际上,你在有条件地分配一些东西。您是否测试了then部件是否正在实际执行(例如,echo If Entered
)
请注意,我给回购分配了一些计算结果为“aaa”的内容
实际上,你在有条件地分配一些东西。您是否测试了then部件是否正在实际执行(例如,如果输入了echo
)。正如评论中所讨论的,在您编辑的问题中,您需要延迟展开
@echo off
setlocal enableDelayedExpansion
for /f %%i in ('echo.') do set REPO=%%i
if "%REPO%"=="" (
echo No input
) else (
echo %REPO:~-1%
echo %REPO:~0,-1%
if !REPO:~-1!==/ set REPO=%REPO:~0,-1%
echo !REPO!
)
endlocal
必须先启用延迟扩展,然后才能使用它。在批处理脚本中,您可以使用setlocal enableDelayedExpansion
@echo off
setlocal enableDelayedExpansion
for /f %%i in ('echo aaa/') do set REPO=%%i
if "%REPO%"=="" (
echo No input
) else (
echo %REPO:~-1%
echo %REPO:~0,-1%
if %REPO:~-1%==/ set REPO=%REPO:~0,-1%
echo !REPO!
)
endlocal
编辑
如果IN()子句被更改为REPO未定义,则上述操作将失败。例如:in(echo.
它失败是因为整个IF/ELSE构造必须具有有效的语法,即使是ELSE子句也不会执行
如果回购协议未定义,则
if %REPO:~-1%==/ set REPO=%REPO:~0,-1%
扩展到
if ~-1REPO:~0,-1
这是无效的语法
采用延迟展开法再次解决了这一问题
@echo off
setlocal enableDelayedExpansion
for /f %%i in ('echo.') do set REPO=%%i
if "%REPO%"=="" (
echo No input
) else (
echo %REPO:~-1%
echo %REPO:~0,-1%
if !REPO:~-1!==/ set REPO=%REPO:~0,-1%
echo !REPO!
)
endlocal
正如在评论和您编辑的问题中所讨论的,您需要延迟展开
@echo off
setlocal enableDelayedExpansion
for /f %%i in ('echo.') do set REPO=%%i
if "%REPO%"=="" (
echo No input
) else (
echo %REPO:~-1%
echo %REPO:~0,-1%
if !REPO:~-1!==/ set REPO=%REPO:~0,-1%
echo !REPO!
)
endlocal
必须先启用延迟扩展,然后才能使用它。在批处理脚本中,您可以使用setlocal enableDelayedExpansion
@echo off
setlocal enableDelayedExpansion
for /f %%i in ('echo aaa/') do set REPO=%%i
if "%REPO%"=="" (
echo No input
) else (
echo %REPO:~-1%
echo %REPO:~0,-1%
if %REPO:~-1%==/ set REPO=%REPO:~0,-1%
echo !REPO!
)
endlocal
编辑
如果IN()子句被更改为REPO未定义,则上述操作将失败。例如:in(echo.
它失败是因为整个IF/ELSE构造必须具有有效的语法,即使是ELSE子句也不会执行
如果回购协议未定义,则
if %REPO:~-1%==/ set REPO=%REPO:~0,-1%
扩展到
if ~-1REPO:~0,-1
这是无效的语法
采用延迟展开法再次解决了这一问题
@echo off
setlocal enableDelayedExpansion
for /f %%i in ('echo.') do set REPO=%%i
if "%REPO%"=="" (
echo No input
) else (
echo %REPO:~-1%
echo %REPO:~0,-1%
if !REPO:~-1!==/ set REPO=%REPO:~0,-1%
echo !REPO!
)
endlocal
这对我很有用(只是我整个剧本的摘录)
这对我很有用(只是我整个剧本的摘录)
你期望的产量是多少?批处理脚本应该做什么?看起来不错。你打算怎么做?有人愿意为投票结果提供解释吗?这个问题的模糊标题不太可能帮助网站的未来访问者。(有关您问题的答案,请参阅“延迟变量扩展”)@RaymondChen-我尝试用修复它代码>-没有骰子。你能给出一个工作示例作为答案吗?你期望得到什么样的结果?批处理脚本应该做什么?看起来不错。你打算怎么做?有人愿意为投票结果提供解释吗?这个问题的模糊标题不太可能帮助网站的未来访问者。(有关您问题的答案,请参阅“延迟变量扩展”)@RaymondChen-我尝试用修复它代码>-没有骰子。你能给出一个有效的例子作为答案吗?差不多了。它适用于echo aaa/
和echo aaa
,但不适用于echo。
@mark-echo。
打印空行,而for/F循环总是忽略空行。这有什么关系?如果在FOR之后立即插入echo“x%REPO%x”
,则在echo.
的情况下,它将打印“xx”,这是正确的。那么为什么IF不起作用呢?我的意思是你解决了延迟扩展问题,那么现在是什么?这太疯狂了!为什么他们不能像在bash那样做?就快到了。它适用于echo aaa/
和echo aaa
,但不适用于echo。
@mark-echo。
打印空行,而for/F循环总是忽略空行。这有什么关系?如果在FOR之后立即插入echo“x%REPO%x”
,则在echo.
的情况下,它将打印“xx”,这是正确的。那么为什么IF不起作用呢?我的意思是你解决了延迟扩展问题,那么现在是什么?这太疯狂了!为什么他们不能像在bash那样做?