[英]windows batch script - setting variable inside for loop
也许我没有清楚地表达我的问题,这是我实际执行的代码:
@echo off
set /p keywords="Enter keywords to search: " %=%
dir /b *.dat > filelist.txt
for /f "delims=." %%f in (filelist.txt) do (
for /f "delims= " %%g in (%%f.dat) do (
7z e %%g *sec.evtx
dir /b *.evtx > evtfile.txt
set /p tmpvar1=<evtfile.txt
del *.evtx
)
)
tsnint1.dat
webint1.dat
TSNINT1-201312091700.zip
TSNINT1-201312091600.zip
TSNINT1-201312091500.zip
TSNINT1-201312091400.zip
TSNINT1-201312091300.zip
TSNINT1-201312091200.zip
WEBINT1-201312091300.zip
WEBINT1-201312091200.zip
我面临的问题是,evtfile包含正确的内容,但是tmpvar1没有按预期正确分配,我的错误是什么以及如何纠正它? 非常感谢
如果已在同一块内设置(或更改)了该变量,则需要延迟扩展才能在块内使用变量。 但是您可以设置变量而不会延迟扩展。
看这个小小的演示(我使用了一个简单的if
构造代替for
,但是效果是相同的(不是if
或for
,而是带有块 (inside (
和)
))。
@echo off
REM SETTING a variable inside a block
set "var=ONE"
echo start: %var%
if 1==1 (
echo inside block: %var%
set var=TWO
echo var has a new value:
set var
echo inside block is still old: %var%
)
echo after block: %var%
echo ----------
REM USING a variable inside a block
setlocal enabledelayedexpansion
set "var=ONE"
echo start: %var%
if 1==1 (
echo inside block: %var%
set var=TWO
echo var has a new value:
set var
echo new value inside block: !var!
echo just to demonstrate: %var%
)
echo after block: %var%
endlocal
echo ----------
echo working fine: %var%
echo not available after endlocal: !var!
以您的代码为基础,这可能会有所帮助。 FWIW如果它们对您很重要,我希望您拥有多个.evtx
文件。
@echo off
setocal enabledelayedexapnsion
for /f "delims=" %%f in ('dir /b *.dat') do (
for /f "delims=" %%g in ('type "%%f" ') do (
7z e "%%g" "*sec.evtx"
dir /b *.evtx > evtfile.txt
set /p tmpvar1=<evtfile.txt
echo !tempvar!
del *.evtx
)
)
一个问题是* .evtx文件在创建第一个归档文件后将被删除,因此后续文件将没有任何归档文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.