Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 如何仅从测试文件中的一行为/F令牌分配?_Batch File_For Loop_Line_Token - Fatal编程技术网

Batch file 如何仅从测试文件中的一行为/F令牌分配?

Batch file 如何仅从测试文件中的一行为/F令牌分配?,batch-file,for-loop,line,token,Batch File,For Loop,Line,Token,如何使它仅从.txt文件的第一行获取令牌,而不是在每一行中循环。我希望%%m被分配到第1行的第3个令牌,然后停止 @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 请参阅这篇文章,它展示了如何使用dos

如何使它仅从.txt文件的第一行获取令牌,而不是在每一行中循环。我希望%%m被分配到第1行的第3个令牌,然后停止

@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

请参阅这篇文章,它展示了如何使用dos批处理文件模拟gnu
head
实用程序:


如果看不到eg文件,也不知道你想做什么,我无法测试,但下面列出了
firstline.bat
,它应该满足你的要求:)起初我认为这需要比现在更复杂。。。在你的第一个if之后,在它的第一个调用问题解决之后,简单地使用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
)

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
    )
)
setlocal EnableDelayedExpansion
对于(%1)中的%%A,请执行以下操作(
未经测试

读取第一行标记3

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

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

因此,您所要做的就是在第一次通过后逃离循环,而不是继续到下一行。

转到下一行
不仅断开内部循环,而且断开了
:下一个
标签刚好在结束括号之前导致语法错误谢谢,这看起来很好。(%1)如何处理知道如何查找我的*.txt吗?因为.\xdrive*.txt被替换为%1它如何知道读取文本文件?@jeb-Arg不测试的危险!用函数调用很容易解决;){Updated}@user910557%1是对调用批处理文件的第一个参数的引用。如果您确实复制了上述代码,请将其保存到
firstline.bat
并执行它,它会告诉您需要提供一个参数(filespec),在您的情况下,您希望将其称为
>firstline。\xdrive\*.txt
。因此,如果我有多个文件要传递给它以读取第一行,我是否需要在开头添加另一个For语句,并调用传递参数的批处理?非常好,我也在考虑
SET/P
。谢谢你帮我省去了用它找出实际解决方案的麻烦!:)谢谢你。相同的关于变量扩展或%1,我一定有什么不明白的地方。I%1是什么?此脚本如何知道如何读取.txt文件?我已经研究过了,但我能说的关于%1%2的一切。。。。它们表示第一个和第二个参数。不确定这是一行还是一个变量,也不确定它与源*.txt文件的关系。Thx再次:)