2015-04-14 77 views
4

我有以下代碼。顯示Windows批處理For循環刪除空字符串到底

@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
@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

+0

非常好。它的確如此。萬分感謝! –

+0

同樣可以使用文件來完成。我的意思是,而不是使用set命令輸入值持有線有沒有辦法將文件記錄讀入holdline變量並執行相同的任務? –

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空白

+0

謝謝。你的解決方案讓我更接近。但是它仍然沒有按照預期的方式處理字符串開始處的第一個空值和2個連續的空值。 –