Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows “如何生存”;延迟变量扩展“;在DOS批处理脚本中_Windows_Batch File - Fatal编程技术网

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那样做?