如何仅在测试文件中从一行分配FOR / F标记?

时间:2011-08-24 20:43:12

标签: batch-file for-loop line token

如何使其仅从.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 个答案:

答案 0 :(得分:2)

如果没有看到eg文件并且确切地知道你要做什么我就无法测试这个,但这里是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
)

答案 1 :(得分: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
    )
)

答案 2 :(得分:1)

请参阅此文章,其中显示了如何使用dos批处理文件模仿gnu head实用程序:

Windows batch command(s) to read first line from text file

答案 3 :(得分:0)

未测试

阅读第一行tokens3

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

答案 4 :(得分: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
  )
)

所以你所做的就是在第一次传球之后逃离循环,而不是继续下一行。