繁体   English   中英

Windows批处理脚本-在循环中设置变量

[英]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
   )
)

filelist.txt

tsnint1.dat
webint1.dat

tsnint1.dat

TSNINT1-201312091700.zip
TSNINT1-201312091600.zip
TSNINT1-201312091500.zip
TSNINT1-201312091400.zip
TSNINT1-201312091300.zip
TSNINT1-201312091200.zip

webint1.dat

WEBINT1-201312091300.zip
WEBINT1-201312091200.zip

我面临的问题是,evtfile包含正确的内容,但是tmpvar1没有按预期正确分配,我的错误是什么以及如何纠正它? 非常感谢

如果已在同一块内设置(或更改)了该变量,则需要延迟扩展才能在块内使用变量。 但是您可以设置变量而不会延迟扩展。

看这个小小的演示(我使用了一个简单的if构造代替for ,但是效果是相同的(不是iffor ,而是带有 (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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM