也许我不能清楚地表示我的问题,下面是我所做的实际代码:
@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
,而是用blocks (inside (
and )
)。
@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文件在创建第一个文件之后被删除,所以后面的文件将没有任何文件存档。