如何使其仅从.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
答案 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
实用程序:
答案 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
)
)
所以你所做的就是在第一次传球之后逃离循环,而不是继续下一行。