【问题标题】:Reuse variable after cutting string切割字符串后重用变量
【发布时间】:2015-02-18 11:52:07
【问题描述】:

这是我在 Windows 批处理中的第一步,我有一个问题,

如果我将此添加到脚本文件中:

IF %p_monitorName%=="workflow_failed" (
    for /F "tokens=1 delims=," %%a in ("%p_monitorStatus: by =.%") do for /F "tokens=3 delims=:" %%b in ("%%a: by =.%") do for /F "tokens=1 delims= " %%c in ("%%b by =.%") do echo %%c >> %scriptdir%\..\logs\SIS2OVOOutput.txt
)

它有效,但如果我尝试在脚本中的其他任何地方使用 %%c 失败,您有什么建议吗?

【问题讨论】:

  • 你应该展示你尝试过的失败,并描述你想要的结果。
  • 如果您需要for命令之外的for可替换参数中的值,请将其保存到变量set "value=%%c"
  • @MCND:这不起作用
  • @dbenham 简单地说,我已经完成了上述操作然后我尝试在 if 条件之外回显 %%c 但没有工作,我删除了 IF 条件并尝试直接回显 After for 循环但是效果也不好。

标签: batch-file window


【解决方案1】:

%%c 形式的变量仅在 FOR 循环上下文中有效。它们在 FOR 循环之外是未定义的或不可访问的。如果您必须访问循环外的值,则将值从循环内传输到环境变量或 CALL 参数。

FOR 变量在所有 FOR 循环中都是全局的。通常,您不能从循环内调用的子例程中访问 FOR 变量。但是您可以通过实例化一个新的 FOR 循环来获得访问权限。

在循环内(在任何括号块内)使用正常的%A% 扩展无法访问在同一块内设置的新值。应该使用延迟扩展!A!。延迟扩展必须通过setlocal enableDelayedExpansion启用

@echo off
setlocal enableDelayedExpansion
set "A=Old Value"
for /f "delims=" %%A in ("Loop Value") do (
  echo Value within loop: %%A
  set "A=%%A"
  echo Value of %%A%% within loop: %A%
  echo Value of ^^!A^^! within loop: !A!
  call :sub "%%A"
)
for %%X in (dummy) do echo Value within X loop after A loop over: %%A
echo Value of %%A%% persists: %A%
exit /b

:sub
echo Value outside of loop: %%A
echo value of %%A%%: %A%
echo Value of %%A%% within subroutine: %A%
echo Value of ^^!A^^! within subroutine: !A!
echo value of %%~1: %~1
for %%X in (dummy) do echo Value within X loop while in subroutine: %%A
exit /b

--输出--

Value within loop: Loop Value
Value of Loop Value% within loop: Old Value
Value of !A! within loop: Loop Value
Value outside of loop: %A
value of %A%: Loop Value
Value of %A% within subroutine: Loop Value
Value of !A! within subroutine: Loop Value
value of %~1: Loop Value
Value within X loop while in subroutine: Loop Value
Value within X loop after A loop over: %A
Value of %A% persists: Loop Value

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-18
    • 1970-01-01
    • 1970-01-01
    • 2013-11-04
    • 1970-01-01
    • 2014-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多