Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.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
Windows batchscript:逐行读取文件并提取路径_Windows_Parsing_Batch File - Fatal编程技术网

Windows batchscript:逐行读取文件并提取路径

Windows batchscript:逐行读取文件并提取路径,windows,parsing,batch-file,Windows,Parsing,Batch File,我想逐行读取文件内容,然后在每一行中只检索路径 sample.txt: \.\docusp\ui\test\java\services\gway->\.\docusp\ui\test\java\pserv\com\controller\services\gway pserver\2 (5660\1) (backed) (elink) \.\docusp\ui\test\java\pserv\services\run->\.\docusp\ui\test\java\pserv\com

我想逐行读取文件内容,然后在每一行中只检索路径

sample.txt:

\.\docusp\ui\test\java\services\gway->\.\docusp\ui\test\java\pserv\com\controller\services\gway  pserver\2 (5660\1) (backed) (elink)
\.\docusp\ui\test\java\pserv\services\run->\.\docusp\ui\test\java\pserv\com\controller\services\rip  pserver\1 (376\1) (backed) (elink)
path: \.\docusp\ui\test\java\services\gway
target: \.\docusp\ui\test\java\pserv\com\controller\services\gway
path: \.\docusp\ui\test\java\pserv\services\run
target:\.\docusp\ui\test\java\pserv\com\controller\services\rip 
@echo off
for /f "delims=" %%a in (C:\sample.txt) DO ( 
    ECHO Line is: %%a
    set line=%%a

    for /f "tokens=1,2 delims=->" %%a in ("%line%") do (
        echo %%a
        echo %%b
        set path=%%a
        set target=%%b
        REM target contains the substring after ->. Want to remove  "pserver\2 (5660\1) (backed) (elink)" string
    )
)
输出:

\.\docusp\ui\test\java\services\gway->\.\docusp\ui\test\java\pserv\com\controller\services\gway  pserver\2 (5660\1) (backed) (elink)
\.\docusp\ui\test\java\pserv\services\run->\.\docusp\ui\test\java\pserv\com\controller\services\rip  pserver\1 (376\1) (backed) (elink)
path: \.\docusp\ui\test\java\services\gway
target: \.\docusp\ui\test\java\pserv\com\controller\services\gway
path: \.\docusp\ui\test\java\pserv\services\run
target:\.\docusp\ui\test\java\pserv\com\controller\services\rip 
@echo off
for /f "delims=" %%a in (C:\sample.txt) DO ( 
    ECHO Line is: %%a
    set line=%%a

    for /f "tokens=1,2 delims=->" %%a in ("%line%") do (
        echo %%a
        echo %%b
        set path=%%a
        set target=%%b
        REM target contains the substring after ->. Want to remove  "pserver\2 (5660\1) (backed) (elink)" string
    )
)
测试。蝙蝠:

\.\docusp\ui\test\java\services\gway->\.\docusp\ui\test\java\pserv\com\controller\services\gway  pserver\2 (5660\1) (backed) (elink)
\.\docusp\ui\test\java\pserv\services\run->\.\docusp\ui\test\java\pserv\com\controller\services\rip  pserver\1 (376\1) (backed) (elink)
path: \.\docusp\ui\test\java\services\gway
target: \.\docusp\ui\test\java\pserv\com\controller\services\gway
path: \.\docusp\ui\test\java\pserv\services\run
target:\.\docusp\ui\test\java\pserv\com\controller\services\rip 
@echo off
for /f "delims=" %%a in (C:\sample.txt) DO ( 
    ECHO Line is: %%a
    set line=%%a

    for /f "tokens=1,2 delims=->" %%a in ("%line%") do (
        echo %%a
        echo %%b
        set path=%%a
        set target=%%b
        REM target contains the substring after ->. Want to remove  "pserver\2 (5660\1) (backed) (elink)" string
    )
)
在目标包含的每一行中

\.\docusp\ui\test\java\pserv\com\controller\services\rip  pserver\1 (376\1) (backed) (elink)
需要删除
pserver\1(376\1)(backed)(elink)
,目标应该只包含
\。\docusp\ui\test\java\pserv\com\controller\services\rip

注意:目标路径之间可能包含空格。基于空间和get子字符串将不起作用


非常感谢您的帮助。

这里的问题是您不清楚问题的重要细节,因此我必须猜测以下两点:

  • 如提供的sample.txt文件所示,目标和要删除的零件之间的间隔为两个空格
  • 当你说“目标路径可能包含中间的空间”时,我假设目标路径可能包含中间的一个空间,而不是两个相邻的空间
以下工作解决方案基于此类假设

@echo off
setlocal EnableDelayedExpansion

for /f "delims=" %%a in (sample.txt) DO ( 
    ECHO Line is: %%a
    set line=%%a

    for /f "tokens=1,2 delims=->" %%a in ("!line:  =-!") do (
        echo path: %%a
        echo target: %%b
    )
)

这里的问题是,您不清楚问题的重要细节,因此我必须对以下两点进行猜测:

  • 如提供的sample.txt文件所示,目标和要删除的零件之间的间隔为两个空格
  • 当你说“目标路径可能包含中间的空间”时,我假设目标路径可能包含中间的一个空间,而不是两个相邻的空间
以下工作解决方案基于此类假设

@echo off
setlocal EnableDelayedExpansion

for /f "delims=" %%a in (sample.txt) DO ( 
    ECHO Line is: %%a
    set line=%%a

    for /f "tokens=1,2 delims=->" %%a in ("!line:  =-!") do (
        echo path: %%a
        echo target: %%b
    )
)

这不是免费的代码编写服务,您发布的代码不会尝试您在问题中列出的任务。在您尝试让代码执行并完成任务失败之前,您的问题在这里是离题的。我还建议,您应该考虑使用Windows脚本主机或PuthSek进行此任务,而不是批处理文件。您似乎误解了<代码> Delims<代码> > <代码> > /f>代码>;它指定用作分隔符的字符列表,但不指定字符串……尽管在本例中,由于它们是这些字符的唯一可见实例,它应正确标识路径,而不应将其命名为该路径,因为它将覆盖现有系统变量,而
target
应该包含行的其余部分(为了进一步细化),但是为了实现这一点,您还需要启用并使用延迟扩展!这不是免费的代码编写服务,您发布的代码不会尝试您在问题中列出的任务。在您尝试让代码执行并完成任务失败之前,您的问题在这里是离题的。我还建议,您应该考虑使用Windows脚本主机或PuthSek进行此任务,而不是批处理文件。您似乎误解了<代码> Delims<代码> > <代码> > /f>代码>;它指定用作分隔符的字符列表,但不指定字符串……尽管在本例中,由于它们是这些字符的唯一可见实例,它应正确标识路径,而不应将其命名为该路径,因为它将覆盖现有系统变量,而
target
应该包含行的其余部分(为了进一步细化),但是为了实现这一点,您还需要启用并使用延迟扩展!非常感谢。成功了。基本上我不熟悉批处理脚本。使用(“!line:pserver=-!”)代替(“!line:pserver=-!”)。因为在我的例子中,pserver在每一行中都是常量,它不会在路径中。我认为在这种情况下,你得到的目标路径在末尾有两个空格…谢谢。成功了。基本上我不熟悉批处理脚本。使用(“!line:pserver=-!”)代替(“!line:pserver=-!”)。因为在我的例子中,pserver在每一行中都是常量,它不会在路径中。我认为在这种情况下,你得到的目标路径的末尾有两个空格。。。