【问题标题】:Batch files: Get value out of string批处理文件:从字符串中获取值
【发布时间】:2023-03-07 10:54:01
【问题描述】:

我收到一个包含以下内容的文件:

\direcotry1\directory2\directory3\file1
\direcotry1\file2
\direcotry1\directory2\directory3\directory4\file3
\direcotry1\file4
\direcotry1\directory2\file5
file6

文件中文件的数量和目录的数量是可变的。

我需要的是文件名 (file1, file2, file3, file4, file5, ...)。这是因为我需要对每个文件执行一些操作。

非常感谢您的帮助。

【问题讨论】:

    标签: batch-file


    【解决方案1】:

    使用这个。只需替换循环内的 echo 即可对 file1、file2 等执行所需的操作。

    @echo off
    setlocal enableextensions enabledelayedexpansion
    for /f %%i in (infile.txt) do (
        set x=%%~ni
        echo !x!
    )
    endlocal
    

    【讨论】:

    • 嘿,一个类似的问题。现在我试图只获得路径。我正在使用 %%~pi ,当有路径时它可以正常工作。当没有路径时,它返回一个无关的路径
    • 所以在上面的 file6 示例中,它不应该返回任何内容,但在我的机器上它返回 /cft/
    • 我可以假设您在运行脚本时的路径是 \cft 吗? “file6”字符串中没有路径信息,所以我怀疑 cmd.exe 只会给你一个默认值(我猜是空字符串或当前目录)。你认为它应该返回什么?
    • 我还建议打开另一个问题(如果您愿意,可以参考这个问题),因为这样会让更多人看到它。两周前没有人会看这个 - 我这样做只是因为我收到了 cmets 的通知。
    • 我认为正在调用的程序确实是 \cft 我将打开一个新问题。谢谢
    【解决方案2】:

    你在找这个命令吗?

    dir /r /b /A:-D
    

    编辑

    对不起,我没有正确理解。 您可以使用该 dir 命令以与您要求的方式类似的方式直接收集文件名。

    不能在批处理文件中使用太多的字符串处理函数,但你想要的都是可能的:

    @echo off
    for /f %%I in (inputfile.txt) DO ECHO %%~nxI
    

    这将打印没有来自 inputfile.txt 的路径的文件名。

    【讨论】:

    • /r?那有什么作用?此外,文件名在文件中,而不是在 dir 可以看到它们的文件系统中。
    • 这个解决方案也很完美!好像我只能点击一个绿色勾号
    • 嘿,一个类似的问题。现在我试图只获得路径。我正在使用 %%~pi ,当有路径时它可以正常工作。当没有路径时,它会返回一条无关的路径。因此,在上面的 file6 示例中,它不应该返回任何内容,但在我的机器上它返回 /cft/
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-17
    • 1970-01-01
    • 2023-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-04
    相关资源
    最近更新 更多