批处理脚本 - 在FOR-IF中分配变量

时间:2014-06-11 00:32:23

标签: batch-file for-loop

我有一个包含此输出的文件:

ANS8000I Server command: 'ru FailedReport'

  Unnamed[1]
------------
       9

 Unnamed[1]
------------
     110

 Unnamed[1]
------------
     101

我需要获取这些数字,并将其分配给三个不同的变量。我制作了这个剧本,但我不能让它起作用......结果总是得到“0”。

@echo off

setlocal enableextensions enabledelayedexpansion

set /A counter=0
SET /A failed=0
SET /A completed=0
SET /A total=0

for /F "tokens=1 skip=4" %%a in (C:\Users\Desktop\Aux.txt) do (

if "%counter%" EQU 5 (set /A failed=%%a)
if "%counter%" EQU 9 (set /A completed=%%a)
if "%counter%" EQU 13 (set /A total=%%a)

set /A counter+=1

)

echo "Failed: " %failed% >> C:\Users\Desktop\Result.txt
echo "Completed: " %completed% >> C:\Users\Desktop\Result.txt
echo "Total: " %total% >> C:\Users\Desktop\Result.txt

有人可以帮我吗?我尝试了很多组合(带有!,%,%%的变量),但我仍然得到了相同的结果。

感谢!!!

2 个答案:

答案 0 :(得分:1)

@ECHO OFF
setlocal enableextensions enabledelayedexpansion

set /A counter=0
SET /A failed=0
SET /A completed=0
SET /A total=0

for /F "tokens=1" %%a in (q24152955.txt) do (
 ECHO !counter! %%a
 if !counter! EQU 3 (set /A failed=%%a)
 if !counter! EQU 9 (set /A completed=%%a)
 if !counter! EQU 6 (set /A total=%%a)

 set /A counter+=1

)

echo "Failed: " %failed% 
echo "Completed: " %completed%
echo "Total: " %total%

GOTO :eof

我使用了一个名为q24152955.txt的文件,其中包含我的测试数据。

在delayedexpansion模式下,%var%指的是var的原始值 - 在循环开始执行之前,!var!是动态值 - 随着它的变化。

"something"永远不会等于something因为引号很重要。如果值本身为空或包含特殊字符(尤其是空格),则通常在此上下文中使用带引号的值 - ""是非空字符串。

for /f忽略空行。我已经包含了一个多余的echo命令来显示for进程的哪些行。请注意,counter的值因此是文件中非空行的序列号,而不是实际行号。另请注意,只包含一个(或多个)空格的行为空行!

答案 1 :(得分:0)

@ECHO off&cls
setlocal enabledelayedexpansion

set "$count=1"
for /f  "delims=" %%a in (C:\Users\Desktop\Aux.txt) do (
 if  !$count!==4 set failed=%%a
 if  !$count!==7 set completed=%%a
 if  !$count!==10 set total=%%a
set /a $count+=1
)

(echo Failed    :  %failed: =%
echo Completed :  %completed: =%
echo Total     :  %total: =%)> C:\Users\Desktop\Result.txt