我正在编写一个批处理脚本,它将分配一个变量字符串,然后修剪它。我面临两个问题:
- 变量分配不正确。它从变量文件中获取最后一个值。
- 我第一次运行脚本时未分配变量。我需要第二次运行脚本以查看变量是否已分配。在第三次运行时,我可以看到修剪正在起作用。
我的脚本如下所示:
@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%
)))
第三次运行时的输出如下所示:
> 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
你掉进了延迟扩张陷阱——试试这个:
@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
块,延迟变量扩展处于活动状态。要实际使用此功能,请将变量括起来!!
而不是%%
.
Since setlocal
为变量设置一个新的命名空间,复合endlocal & set
需要声明来转移值str
超出街区。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)