批处理脚本不按预期分配变量

时间:2015-07-30 08:39:36

标签: batch-file

我正在处理一个批处理脚本,它将分配一个变量字符串然后修剪它。我面临两个问题:

  1. 变量未正确分配。它从变量文件中获取最后一个值。
  2. 第一次运行脚本时,变量未分配。我需要第二次运行脚本以查看是否已分配变量。在第三轮,我可以看到修剪工作。
  3. 我的脚本如下所示:

    > C:\Users\parthod\Desktop>b.bat
    in loop
    xsj-uvapoms72
    7.2.27
    7.2.27
    in loop
    xsj-uvapoms82
    7.2.27
    7.2.27
    in loop
    172.17.2.26
    7.2.27
    7.2.27
    in loop
    172.17.2.27
    7.2.27
    7.2.27
    

    第三次运行时输出如下:

    {% extends %}, {% include %}, ...

1 个答案:

答案 0 :(得分:2)

你陷入delayed expansion陷阱 - 试试这个:

@echo off
setlocal EnableDelayedExpansion
for /f "tokens=*" %%a in ('findstr "W3SVCWINSRVRHOSTS" "C:\Data\SiebelAdmin\Commands\file.txt"') do (
for /f "tokens=2 delims==" %%b in ("%%a") do (
for %%c in (%%b) do (
echo in loop
set str=%%c
echo %%c
echo.!str!
set str=!str:~-6!
echo.!str!
)))
endlocal & set str=%str%

setlocal / endlocal块之间,延迟变量扩展处于活动状态。要实际使用此功能,请将变量括在!!而不是%% 由于setlocal为变量设置了新的命名空间,因此需要使用复合endlocal & set语句将str的值传输到块之外。