Batch file 批处理脚本未按预期分配变量

Batch file 批处理脚本未按预期分配变量,batch-file,Batch File,我正在编写一个批处理脚本,它将分配一个变量字符串,然后对其进行修剪。我面临两个问题: 变量分配不正确。它从变量文件中获取最后一个值 变量在我第一次运行脚本时没有赋值。我需要再次运行脚本,看看变量是否已分配。在第三次运行时,我可以看到修剪正在工作 我的脚本如下所示: @echo off for /f "tokens=*" %%a in ('findstr "W3SVCWINSRVRHOSTS" "C:\Data\SiebelAdmin\Commands\file.txt"') do ( for /

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

  • 变量分配不正确。它从变量文件中获取最后一个值
  • 变量在我第一次运行脚本时没有赋值。我需要再次运行脚本,看看变量是否已分配。在第三次运行时,我可以看到修剪正在工作
  • 我的脚本如下所示:

    @echo off
    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%
    )))
    
    第三次运行时的输出如下所示:

    你掉进了陷阱--试试这个:

    @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
    的值传递到块之外。

    如果有帮助,不要忘了向上投票或接受答案……;)
    @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%