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 批处理文件以从.tmp读取最后一行,即使它以开头;性格_Batch File - Fatal编程技术网

Batch file 批处理文件以从.tmp读取最后一行,即使它以开头;性格

Batch file 批处理文件以从.tmp读取最后一行,即使它以开头;性格,batch-file,Batch File,见鬼,各位,我有个奇怪的问题要问你们 我有这个.tmp文件 我需要得到最后一行,确切地说是ABC123,没有字符。 我目前正在使用下面的批处理脚本,如果我没有,它就可以工作ABC123之前的字符。我不知道为什么批处理脚本跳过了带有的行字符 批处理脚本 有人能帮我吗? 谢谢它跳过以开头的行由于这是默认的下线字符,请参见以获取/? 为了避免这种情况,您可以将EOL更改为另一个角色,如 for /f "EOL=Y delims=" %%x in (c:\print\pack2.tmp) do set

见鬼,各位,我有个奇怪的问题要问你们

我有这个.tmp文件

我需要得到最后一行,确切地说是ABC123,没有字符。 我目前正在使用下面的批处理脚本,如果我没有,它就可以工作ABC123之前的字符。我不知道为什么批处理脚本跳过了带有的行字符

批处理脚本

有人能帮我吗?


谢谢

它跳过以
开头的行由于这是默认的下线字符,请参见
以获取/?

为了避免这种情况,您可以将EOL更改为另一个角色,如

for /f "EOL=Y delims=" %%x in (c:\print\pack2.tmp) do set Build=%%x
如果你知道一个特定的角色不能在这个位置,那么你可以选择它

或者使用findstr将文件括起来,这样每一行都以行号开头(那么/F
也可以抓取空行)

雷姆

您需要更改
sourcedir
的设置以适应您的环境


我使用了一个名为
Q4088302.txt
的文件,其中包含测试数据。

由于循环的
eol
选项默认为
,因此跳过该行字符

delims
选项不同,您不能简单地通过声明选项字符串
“eol=“
”来禁用
eol
选项,因为这样会将其设置为
字符。类似
“eol=delims=“
这样的字符串也不起作用,因为这样会占用空间作为
eol
字符

要禁用下线
选项,有几种可能性:

  • 将其隐藏在
    delims
    选项后面:

    for /F "usebackq eol=, delims=," %%L in ("file.txt") do set "Build=%%L"
    
    eol
    字符指定给一个给定的
    delims
    字符将禁用
    eol
    ,因为
    delims
    对于/F
  • ,似乎具有比
    更高的优先级。
    eol
    delims
    的顺序并不重要

  • 使用奇数无引号语法:

    for /F usebackq^ delims^=^ eol^= %%L in ("file.txt") do set "Build=%%L"
    
    每个令牌分隔符(空格、制表符、
    =
    以及非中断空格
    0xFF
    )必须通过前面的
    ^
    进行转义。在此,必须将
    eol
    指定为最后一个选项。未转义的空格不作为
    eol
    字符,因为解析器使用它来将
    变量引用
    %%L
    的选项字符串与
    分开

  • 使用奇数换行语法:

    for /F usebackq^ eol^=^
    
    delims^= %%L in ("file.txt") do set "Build=%%L"
    
    此处必须使用空行。在
    eol^=
    部分之后的
    ^
    构成行继续,因此忽略第一个换行符(CR+LF,回车换行序列)。下一个字符是LF(解析器在读取代码行时已跳过CR),按字面意思理解为
    eol
    字符。由于这些字符不能出现在文本行中,因为它们标记行的结尾,因此
    eol
    选项最终被禁用


  • 谢谢,是的,我的问题解决了。我不知道EOL选项。
    @ECHO OFF
    SETLOCAL
    SET "sourcedir=U:\sourcedir"
    SET "filename1=%sourcedir%\q40888302.txt"
    FOR /f "usebackqtokens=1*eol=;delims=; " %%a IN ("%filename1%") DO (
    SET var=%%~a
    )
    ECHO "%var%"
    GOTO :EOF
    
    for /F "usebackq eol=, delims=," %%L in ("file.txt") do set "Build=%%L"
    
    for /F usebackq^ delims^=^ eol^= %%L in ("file.txt") do set "Build=%%L"
    
    for /F usebackq^ eol^=^
    
    delims^= %%L in ("file.txt") do set "Build=%%L"