【问题标题】:How can I get Filename using Batch?如何使用批处理获取文件名?
【发布时间】:2015-12-11 14:51:26
【问题描述】:

这个问题在网上被问了很多次,所以我提前道歉,但很遗憾我无法让我的代码运行。

背景信息:

每个文件都有一个带日期的前缀(或后缀)——因此是“RootFileName”前后的通配符。

我觉得上面的代码应该给我文件名 (%~nF)...但是一旦我的代码到达下面的部分,它就会终止批处理。

我的代码:

:fileprocessing
pause
FOR /R %F in ("K:\path\*RootFileName*.txt") DO (
    echo %~nF
    pause
    )

注意:上面添加了停顿,用于排除故障以准确找到我的批处理终止的位置。

我也试过了:

:fileprocessing
pause
FOR /R "K:\path\" %F in (*RootFileName*.txt) DO (
    echo %~nF
    pause
    )

我的问题:

一旦我的批处理到达上面的代码部分,它就会终止(即我永远不会看到我的回显文件名,第二个“暂停”步骤永远不会触发)。

感谢您的帮助!

【问题讨论】:

  • 打开命令提示符窗口,输入for /?help for 并使用RETURN 执行。现在您会看到命令 FOR 的显示帮助,您应该仔细阅读,最好是所有页面,而不仅仅是第一页。

标签: batch-file filenames


【解决方案1】:

在批处理文件中引用元变量%F时使用双%,因此

FOR /R "K:\path" %%F in (*RootFileName*.txt) DO (
    echo %%~nF

【讨论】:

  • 这停止了终止问题。谢谢!但是,现在它正在跳过文件名 echo 并直接进入第二个暂停?
  • 实际上看起来它没有运行任何 DO() 命令并跳到我在程序退出之前放置的另一个故障排除暂停。关于它为什么跳过 DO() 的任何建议?
  • 使用 `FOR /R "M:\seattle" %%F in (d23) DO ( echo %%~nF pause ) [换行符为你有他们] - 我的系统尽职尽责地显示文件名并暂停。
  • 我是个白痴,仍在使用我最新版本的代码(上面的第一组)。 @zb226 帮助我意识到我做错了什么。谢谢!
【解决方案2】:

扩展 Magoo 的答案,您似乎需要使用第二种形式:

:fileprocessing
pause
FOR /R "K:\path\" %%F IN (*RootFileName*.txt) DO (
    ECHO %%~nF
    pause
)

【讨论】:

    猜你喜欢
    • 2011-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-17
    • 2014-02-26
    • 2022-06-28
    • 1970-01-01
    相关资源
    最近更新 更多