【问题标题】:Loop through list, set variable遍历列表,设置变量
【发布时间】:2013-07-18 12:53:19
【问题描述】:

我正在尝试创建一个循环,该循环遍历每行都有文件名的文件,将第一个文件名设置为变量,然后执行其余的脚本。然后取第二行并做同样的事情。 等等等等 问题是它只执行 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
)

【问题讨论】:

  • 非常不清楚的问题...
  • 显然你有循环,那么问题是什么?
  • 您不能在 LOOP 构造之外使用 %%G。你的行 ---> ) %%G
  • 因为它不起作用
  • 它只执行 filenames.txt 的第一行

标签: loops batch-file


【解决方案1】:

没有看到脚本的其余部分...您可能需要做 2 件事中的 1 件事:

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

【讨论】:

  • 但是我什么时候应该使用 !filename!如果我应该使用 %G% 代替吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-31
  • 2017-11-01
  • 2016-02-05
  • 1970-01-01
  • 1970-01-01
  • 2012-10-05
相关资源
最近更新 更多