【问题标题】:Get filename in batch for loop批量获取文件名for循环
【发布时间】:2009-07-08 20:42:00
【问题描述】:

我在批处理文件中有以下 For 循环:

for /R c:\test\src %%i IN (*.*) DO (
MOVE %%i C:\test\destination
ECHO %%i
exit
)

ECHO 的结果输出整个文件路径 Ex: C:\Foldername\Filename 我只需要回显文件名。是否有特定的命令可以给我文件名? 谢谢!

【问题讨论】:

  • 顺便说一句,如果你使用的是本世纪的windows版本,你使用的不是DOS,而是windows命令提示符。

标签: windows batch-file cmd


【解决方案1】:

启用命令扩展后(大致是 Windows XP 和更新版本),您可以使用语法 %~nF(其中 F 是变量,~n 是对其名称的请求)来仅获取文件名。

FOR /R C:\Directory %F in (*.*) do echo %~nF

应该只回显文件名。

【讨论】:

  • 如果您还想查看文件扩展名,请在末尾添加 %~xF。
  • 或 %~nxf 获取带扩展名的文件名。
  • @Dave: for %f in (*.*) (或 for %f in (c:\directory\*.*) )应该可以工作。
  • 这个 cmd 在 win7 64bits 上不适合我。 “~nF 在这个时候是出乎意料的。”
  • 如果此命令在批处理文件中,请不要忘记使用双百分比:echo %%~nF
【解决方案2】:

或者 Just %~F 会给你完整的路径和完整的文件名。

例如,如果要注册当前目录下的所有 *.ax 文件....

FOR /R C:. %F in (*.ax) do regsvr32 "%~F"

这在 Win7(64 位)中运行得非常好:-)

【讨论】:

    【解决方案3】:

    @AKX 的答案适用于命令行,但不适用于批处理文件。在批处理文件中,您需要一个额外的%,如下所示:

    @echo off
    for /R TutorialSteps %%F in (*.py) do echo %%~nF
    

    【讨论】:

      【解决方案4】:

      我有点晚了,但我用了这个:

      dir /B *.* > dir_file.txt
      

      然后您可以创建一个简单的 FOR 循环来提取文件名并使用它们。例如:

      for /f "tokens=* delims= " %%a in (dir_file.txt) do (
      gawk -f awk_script_file.awk %%a
      )
      

      或将它们存储到 Vars (!N1!, !N2!..!Nn!) 以供以后使用。例如:

      set /a N=0
      for /f "tokens=* delims= " %%a in (dir_file.txt) do (
      set /a N+=1
      set v[!N!]=%%a
      )
      

      【讨论】:

      • gawk 并非无处不在
      【解决方案5】:

      如果你想保留文件名(仅)和扩展名,你可以使用%~nxF:

      FOR /R C:\Directory %F in (*.*) do echo %~nxF

      【讨论】:

        猜你喜欢
        • 2021-11-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-08
        • 2023-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多