如何将文件夹名称添加到我的批处理文件中创建的文件中?

时间:2014-12-15 18:57:05

标签: batch-file copy

我正在使用 -

for /d /r %%a in (*) do (
    del "%%~fa\COMBINED_NAD.TXT" >nul 2>nul 
    copy /b "%%~fa\*NAD.TXT" "%%~fa\COMBINED_NAD.TMP"
    ren "%%~fa\COMBINED_NAD.TMP" "COMBINED_NAD.TXT"
)

哪个很好用,但我还需要它在目录文件夹名称中包含目录文件夹名称 - 例如我希望输出类似于 - “%DIR%_COMBINED_NAD.TXT”。

有谁知道我需要添加什么?谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

根据您想要的输出,有几种可能的解决方案。


  1. 排除基本目录。
  2. 如果该程序在C:\Users\Example\Documents\中运行,并且位于C:\Users\Example\Documents\Example\Something\文件夹中,则结果为Example_Something_COMBINED_NAD.TXT

    setlocal enabledelayedexpansion
    
    for /d /r %%a in (*) do (
        del "%%~fa\COMBINED_NAD.TXT" >nul 2>nul 
        copy /b "%%~fa\*NAD.TXT" "%%~fa\COMBINED_NAD.TMP"
        set dir=%%~fa
        set dir=!dir:%cd%\=!
        set dir=!dir:\=_!
        ren "%%~fa\COMBINED_NAD.TMP" "!dir!_COMBINED_NAD.TXT"
    )
    

    这里重要的是:

    set dir=%%~fa
    set dir=!dir:%cd%\=!
    set dir=!dir:\=_!
    

    第一行将dir设置为%%~fa,这是当前正在处理的文件夹 第二行替换%cd%(启动程序的目录)的值dir(空白)的所有出现。
    第三行用下划线替换所有斜杠。 (文件名不能包含斜杠)

    请注意,这使用!varname!而不是%varname%set的帮助中对此进行了解释,这就是为什么需要setlocal enabledelayedexpansion


    1. 包含基本目录。
    2. 如果该程序在C:\Users\Example\Documents\中运行,并且位于C:\Users\Example\Documents\Example\Something\文件夹中,则结果为Users_Example_Documents_Example_Something_COMBINED_NAD.TXT

      setlocal enabledelayedexpansion
      
      for /d /r %%a in (*) do (
          del "%%~fa\COMBINED_NAD.TXT" >nul 2>nul 
          copy /b "%%~fa\*NAD.TXT" "%%~fa\COMBINED_NAD.TMP"
          set dir=%%~pa
          set dir=!dir:\=_!
          set dir=!dir:~1!
          ren "%%~fa\COMBINED_NAD.TMP" "!dir!_COMBINED_NAD.TXT"
      )
      

      这里重要的是:

      set dir=%%~pa
      set dir=!dir:\=_!
      set dir=!dir:~1!
      

      它与第一个非常相似,但已经做了一些改动。

      第一行将dir设置为文件夹,但不设置驱动器号 第二行用下划线替换斜杠(与上面相同的原因) 第三行将dir设置为1 char为dir。这是必需的,否则它将以前导下划线输出。


      如果程序在Something_COMBINED_NAD.TXT中运行,并且位于C:\Users\Example\Documents\文件夹中,我不知道产生C:\Users\Example\Documents\Example\Something\的解决方案。