在批处理中迭代时从文件读取输入时发出问题

时间:2015-10-26 12:36:52

标签: windows batch-file cmd batch-processing

从输入文件中读取下面显示的值(FILE.txt)时出现问题。 < >符号导致不正确的阅读。我厌倦了使用^(转义字符,但它没有用,我也试过双引号(""),结果是同样混乱的输出。

无论如何,我可以使用<迭代读取文件的内容。 > =字符。 请帮忙

FILE.txt contains

A;Select * from TablenameA where time=>yesterdaytime and time<endtime;XXX;YYY
B;Select * from TablenameB where time=>yesterdaytime and time<endtime;AAA;YYY
C;Select * from TablenameC where time=>yesterdaytime and time<endtime;BBB;YYY


--------------SCRIPT----------------------------------
SET vFILENAME=FILE.txt
for /F "tokens=1,2,3,4 delims=;" %%i in (%vFILENAME%) do call :process "%%i" "%%j" "%%k" "%%l"
goto END

:process
    set VAR1=%~1
    set VAR2=%~2
    set VAR3=%~3
    set VAR4=%~4


    echo %VAR1%
    echo %VAR2%
    echo %VAR3%
    echo %VAR4%

----------------------SCRIPT-END----------------------

更新:从for循环删除的报价&#34;%vFILENAME%&#34;

问题更新:如果我想将输出重定向到不同的文件

,该怎么办?

示例:

        echo PrmOne=%VAR1%>Output.txt
        echo PrmTWO=%VAR2%>>Output.txt
        echo PrmTHREE=%VAR3%>>Output.txt
        echo PrmFOUR=%VAR4%>>Output.txt

2 个答案:

答案 0 :(得分:2)

您的代码有一些错误(除了引号问题):for /F命令需要usebackq选项,因为您将文件名括在引号中:

@echo off

SET vFILENAME=FILE.txt
for /F "usebackq tokens=1,2,3,4 delims=;" %%i in ("%vFILENAME%") do call :process "%%i" "%%j" "%%k" "%%l" < NUL
goto :EOF

:process
    set "VAR1=%~1"
    set "VAR2=%~2"
    set "VAR3=%~3"
    set "VAR4=%~4"


    set /P "=%VAR1%" & echo/
    set /P "=%VAR2%" & echo/
    set /P "=%VAR3%" & echo/
    set /P "=%VAR4%" & echo/

输出:

A
Select * from TablenameA where time=>yesterdaytime and time<endtime
XXX
YYY
B
Select * from TablenameB where time=>yesterdaytime and time<endtime
AAA
YYY
C
Select * from TablenameC where time=>yesterdaytime and time<endtime
BBB
YYY

答案 1 :(得分:0)

问题是由于参数中的双引号:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:os="URL">

该行应

for /?

FOR /F .. ("string")

否则字符串&#34; FILE.txt&#34;用作输入

更新后,评论&lt; &GT;符号用于间接回声需要然后用双引号