循环列表,设置变量

时间:2013-07-18 12:53:20

标签: loops batch-file

我正在尝试创建一个遍历每行文件名的文件的循环,将第一个文件名设置为变量并执行其余的脚本。然后走第二行并做同样的事情。 等等 问题是它只执行filenames.txt的第一行

@echo off

for /F "tokens=*" %%G in (filenames.txt) do (
set filename=%%G
script
script
script
)
pause

它是一个批处理文件。 整个剧本:

@ECHO OFF
for /F "tokens=*" %%G in (filenames.txt) do (
SET FileName=%%G
SET Word1="ts_confirmImplicitSAMM.gram"
SET Word2="SWIrcnd"
for /f "tokens=3" %%f in ('find /c /i %Word1% %FileName%') do set PairsToShow=%%f
SET /a Lines1=0, Lines2=0
FOR /f "delims=" %%a IN ('findstr "%Word1%" "%FileName%"') DO (
SET "str=%%a"
SET /a Lines1+=1
SETLOCAL enabledelayedexpansion
SET "$1!Lines1!=!str!"
FOR /f "tokens=1*delims==" %%b IN ('set "$1"') DO (IF "!"=="" endlocal)&SET "%%b=%%c"
)
FOR /f "delims=" %%a IN ('findstr "%Word2%" "%FileName%"') DO (
SET "str=%%a"
SET /a Lines2+=1
SETLOCAL enabledelayedexpansion
SET "$2!Lines2!=!str!"
FOR /f "tokens=1*delims==" %%b IN ('set "$2"') DO (IF "!"=="" endlocal)&SET "%%b=%%c"
)
SET /a Lines=Lines1+Lines2
ECHO(%Lines% lines read from %FileName%.
IF %Lines1% leq %Lines2% (SET /a MaxPairs=Lines1) ELSE SET /a MaxPairs=Lines2
IF %PairsToShow% gtr %MaxPairs% (
ECHO only text for %MaxPairs% pairs NOT %PairsToShow% :/
GOTO :END
)
(FOR /l %%a IN (1,1,%PairsToShow%) DO (
SETLOCAL ENABLEDELAYEDEXPANSION
CALL SET "Line1=%%$1%%a%%"
CALL SET "Line2=%%$2%%a%%"
<NUL SET /p "=!Line1!"
ECHO !Line2!
ENDLOCAL
))>> result1.txt
ENDLOCAL
TYPE result1.txt| FINDSTR /V EVNT=SWIgrld >> result.txt
DEL result1.txt

PAUSE
)

1 个答案:

答案 0 :(得分:0)

没有看到你脚本的其余内容......你可能需要做两件事之一:

  1. 使用SETLOCAL ENABLEDELAYEDEXPANSION(作为脚本的第2行),然后将变量filename引用为!filename!而不是%filename%来使用运行时值而不是加载时值。但这可能会导致其他问题,具体取决于“脚本”中的内容。
  2. 只需使用%% G代替文件名
相关问题