Windows批量For循环将空字符串放到最后

时间:2015-04-14 23:45:06

标签: windows batch-file for-loop cmd

我有以下代码。

@echo off
setlocal EnableDelayedExpansion
set holdingline=,Measure,,+ X,,,0,0
FOR /F "tokens=1,2,3,4,5,6,7,8 delims=," %%a IN ("%holdingline%") DO (
    echo %%a
    echo %%b
    echo %%c
    echo %%d
    echo %%e
    echo %%f
    echo %%g
    echo %%h
    echo %holdingline%
)
pause

显示的输出如下:

Measure
+ X
0
0
ECHO is off.
ECHO is off.
ECHO is off.
ECHO is off.
,Measure,,+ X,,,0,0

空字符串被推到最后,我想知道为什么。我期待他们的顺序,比如说:

ECHO is off.
Measure
ECHO is off.
+ X
ECHO is off.
ECHO is off.
0
0
,Measure,,+ X,,,0,0

这使我能够将它们分配给正确的变量。我试过搜索但没有找到太多帮助。

2 个答案:

答案 0 :(得分:2)

这应该做你想要的:

@echo off
setlocal EnableDelayedExpansion
set holdingline=,Measure,,+ X,,,0,0
FOR /F "tokens=1,2,3,4,5,6,7,8 delims=," %%a IN ("%holdingline:,,=, ,%") DO (
    echo %%a
    echo %%b
    echo %%c
    echo %%d
    echo %%e
    echo %%f
    echo %%g
    echo %%h
    echo %holdingline%
)
pause

,,替换, ,会导致它将中间变量设置为(空格),因此对它们一无所知。如果您在两个,之间没有任何内容,则会跳过它们,因此只存在4个变量,只留下e-h空白

答案 1 :(得分:2)

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
set holdingline=,Measure,,+ X,,,0,0
FOR /F "tokens=1-8 delims=," %%a IN (""%holdingline:,=","%"") DO (
    ECHO(%%~a
    ECHO(%%~b
    ECHO(%%~c
    ECHO(%%~d
    ECHO(%%~e
    ECHO(%%~f
    ECHO(%%~g
    ECHO(%%~h
    echo %holdingline%
)

GOTO :EOF

这应该可以解决您的问题


处理文件,生成新文件

@ECHO OFF
SETLOCAL
(
FOR /f "delims=" %%x IN (q29639243.txt) DO (
 set "holdingline=%%x"
 CALL :process
)
)>u:\new.txt

GOTO :EOF

:process
FOR /F "tokens=1-8 delims=," %%a IN (""%holdingline:,=","%"") DO (
    ECHO(%%~a
    ECHO(%%~b
    ECHO(%%~c
    ECHO(%%~d
    ECHO(%%~e
    ECHO(%%~f
    ECHO(%%~g
    ECHO(%%~h
    echo %holdingline%
)

GOTO :EOF

我使用了一个名为q29639243.txt的文件,其中包含类似的测试数据。 生成u:\ new.txt