【问题标题】:Batch Windows: get last two folders before file name [duplicate]批处理Windows:获取文件名之前的最后两个文件夹[重复]
【发布时间】:2020-11-07 08:17:50
【问题描述】:

我目前正在尝试重命名子文件夹中的文件,同时附加他的子文件夹名称、路径中紧邻上方的子文件夹名称和当前日期。 这是完整路径:

C:\USER_VALIDATION\INPUT\GRUPPO_FARLOCCO\AIX\merge.csv

我希望 merge.csv 变成 GRUPPO_FARLOCCO_AIX_17072020.csv 我需要在批处理文件和 FOR 中执行此操作,因为我需要在每个子文件夹中重复此重命名操作

C:\USER_VALIDATION\INPUT\.

到目前为止,我可以得到这个结果:AIX_17072020.csv 使用以下代码

FOR /D /R %%# in (*) DO (
    PUSHD "%%#"
  FOR %%@ in ("merge*") DO (
    Echo Ren: ".\%%~n#\%%@" "%%~n#_%date:/=%%%~x@"
        Ren "%%@" "%%~n#_%date:/=%%%~x@"
    )
    POPD
)
Pause&Exit

现在,我可以通过 %%~p@ 获得\USER_VALIDATION\INPUT\GRUPPO_FARLOCCO\AIX\,但我不能只获得最后两个文件夹。我认为删除前 23 个字符并将剩余的两个“”替换为“_”可能是有效的,但我不能这样做。 有人可以帮忙吗? 谢谢!

【问题讨论】:

  • 如果您完全理解该链接,您应该能够修改该代码以获取父文件夹和祖父文件夹。
  • @Squashman 我可以使用 " for %%I in (..) 获取正确的文件夹名称,但在变量为空后立即设置 ParentFolderName=%%~nI%%~xI"当我尝试打印它时打开我的回声),如果我将 %%~nI%%~xI 放在我的 ren 前面,我什么也得不到。我想这是因为我把它放在了我的第二个 FOR 上。能给点建议吗?

标签: windows batch-file


【解决方案1】:

这是工作代码:

@Echo OFF
FOR /D /R %%# in (*) DO (
    PUSHD "%%#"
  FOR %%@ in ("merge*") DO (
for %%I in (..) DO Ren "%%@" "%%~nI%%~xI_%%~n#_%date:/=%%%~x@"
    )
    POPD
)

Pause&Exit

感谢@squashman 的分享

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-06
    • 1970-01-01
    • 2020-04-15
    相关资源
    最近更新 更多