2011-08-24 36 views
2

如何使第一行只在.txt文件中抓取令牌,而不是循環遍歷每一行。我希望%% m被分配到第一行的第三個標記,然後停止。如何僅在測試文件中僅從一行分配FOR/F令牌?

@echo off 
FOR %%A IN (.\xdrive\*.txt) DO (
    FOR /F "usebackq tokens=3 delims=," %%m IN ("%%A") DO (
    IF "%%m" == "F01" (xcopy /Y "%%A" .\Outbound) 
    pause 
) 
) 
pause 

回答

2

沒有看到如文件,並知道你正在試圖做什麼我不能測試這個,但這裏是firstline.bat的列表,它應該做你要求的:)起初,我認爲這需要比它更復雜......在你第一次之後,如果簡單地使用goto退出第一次打電話後的結構 - 問題解決了嗎?

@echo off 

::: firstline.bat - Retrieve the first line from a series of files 
::: usage: firstline $filespec 
:::  filespace - files to process (eg .\xdrive\*.txt) 
if "%~1"=="" findstr "^:::" "%~f0"&GOTO:EOF 

FOR %%A IN (%1) DO (
    call :testfirst "%%A" 
) 
goto :eof 

:testfirst 
FOR /F "usebackq tokens=3 delims=," %%m IN (%1) DO (
    IF "%%m" == "F01" (xcopy /Y %1 .\Outbound) 
    goto:eof 
) 
+0

'goto next'不僅會破壞FOR循環,而且會在結束括號之前導致語法錯誤 – jeb

+0

謝謝,這看起來不錯。 (%1)如何知道要查看我的* .txt文件?由於。\ xdrive \ *。txt被替換爲%1,它如何知道讀取文本文件? – user910557

+0

@jeb - Arg不測試的危險!用函數調用輕鬆解決;){更新} – Rudu

2

set /p可以用來閱讀的第一行,然後就可以使用FOR/F環獲得第三令牌

setlocal EnableDelayedExpansion 
FOR %%A IN (%1) DO (
    <%%A set /p firstline= 
    FOR /F "tokens=3 delims=," %%m IN ("!firstline!") DO (
     echo %%m 
    ) 
) 
+0

非常好,我正在考慮' SET/P'。感謝您爲我節省解決實際問題的麻煩! :) –

+0

謝謝你。一樣嗎?必須有一些我不瞭解變量擴展或%1的內容。我的%1以及該腳本如何知道讀取.txt文件?我已經研究過,但我可以告訴%1%2 ....是他們代表第一和第二個參數。不知道這是一個行還是變量,或者它與源* .txt文件的關係。 Thx再次:) – user910557

0

未經檢驗

讀第一行tokens3

for /f "tokens=3 delims=," %%a in ('"findstr /n . %1|findstr /b 1:"') do set fltok3=%%a 
echo(%fltok3% 
0

Hackish =

@echo off 
FOR %%A IN (.\xdrive\*.txt) DO (
    FOR /F "usebackq tokens=3 delims=," %%m IN ("%%A") DO (
    IF "%%m" == "F01" (xcopy /Y "%%A" .\Outbound) 
    GOTO:EOF 
) 
) 

因此,您所做的只是在第一次通過後逃避循環,而不是繼續下一行。

相關問題