也许我没有清楚地表达我的问题,这是我所做的实际代码:
@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没有按预期正确分配,我的错误是什么以及如何纠正?非常感谢
答案 0 :(得分:3)
当在同一个块内设置(或更改)此变量时,您需要将块中的变量延迟扩展为使用变量。但是你可以设置变量而不会延迟扩展。
请参阅此小演示(我使用简单的if
构造而不是for
,但效果相同(不是if
或for
,而是< em> blocks (在(
和)
内)。
@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!
答案 1 :(得分:0)
这可能会有所帮助,使用您的代码作为基础。 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文件,因此后续存档将无需存档。