Как назначить токен FOR / F только из одной строки в тестовом файле? - PullRequest
2 голосов
/ 25 августа 2011

Как мне сделать так, чтобы токен получался ТОЛЬКО из первой строки ТОЛЬКО в файле .txt, а не проходил по каждой строке.Я хочу, чтобы %% m был назначен третьему токену только в первой строке, а затем остановился.

@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

Ответы [ 5 ]

2 голосов
/ 25 августа 2011

Не видя, например, файлы и точно зная, что вы пытаетесь сделать, я не могу проверить это, но вот список firstline.bat, который должен делать то, что вы просите :) Сначала я подумал, что это необходимо быть более сложным, чем это ... после вашего первого, если просто использовать goto для выхода из структуры for после первого вызова - проблема решена?

@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
)
2 голосов
/ 25 августа 2011

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
    )
)
1 голос
/ 25 августа 2011

См. Этот пост, в котором показано, как имитировать утилиту gnu head с использованием пакетного файла dos:

Пакетная команда Windows для чтения первой строки из текстового файла

0 голосов
/ 30 августа 2011

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

Итак, все, что вы делаете - это выходите из цикла после первого прохода, а не переходите к следующей строке.

0 голосов
/ 25 августа 2011

непроверенных

читать токены первой строки3

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