【问题标题】:Append file name with name of the folder and replace `-` and remove spaces将文件名附加到文件夹名称并替换 `-` 并删除空格
【发布时间】:2020-04-08 13:55:17
【问题描述】:

我有一个文件夹,其中包含

P:\RECORDINGS\2020-04-08 14-09-07 - VIDS - -\VIDS - -.mp4
P:\RECORDINGS\2020-04-08 14-09-07 - VIDS - -\VIDS - -.json
P:\RECORDINGS\2020-04-08 14-09-07 - VIDS - -\VIDS - -.aaf

我希望根据保存文件的文件夹重命名文件。

P:\RECORDINGS\2020-04-08 14-09-07 - VIDS - -\2020-04-08 14-09-07-VIDS.mp4
P:\RECORDINGS\2020-04-08 14-09-07 - VIDS - -\2020-04-08 14-09-07-VIDS.json
P:\RECORDINGS\2020-04-08 14-09-07 - VIDS - -\2020-04-08 14-09-07-VIDS.aaf

我得到的是以下内容

P:\RECORDINGS\2020-04-08 16-01-12 - TEST - ->(
Echo Ren: ".\2020-04-08 16-01-12 - TEST - -\TEST - -.m4a" "2020-04-08 16-01-12 - TEST - -.m4a"
 Ren "TEST - -.m4a" "2020-04-08 16-01-12 - TEST - -.m4a"

我有这个代码,但是,它似乎没有附加名称,所以替换它。

@echo on
Setlocal enabledelayedexpansion

FOR /D /R %%# in (*) DO (
    PUSHD "%%#"
    FOR %%@ in ("*") DO (
        Echo Ren: ".\%%~n#\%%@" "%%~n#%%~x@"
        Ren "%%@" "%%~n#%%~x@"
    )
    POPD
)

以上代码来自:click here(我能找到的衣柜)

更新

@echo off Setlocal enabledelayedexpansion rem - keeps the first 19 chas of the folder names for /F "delims=" %%D in ('dir /B /A:D "*"') do ( set "FOLDER=%%D" setlocal EnableDelayedExpansion ren "!FOLDER!" "!FOLDER:~,19!" endlocal ) for /r %%a in (*.*) do for %%b in ("%%~dpa\.") do echo ren "%%~a" "%%~nxb____%%~xa"

好的。所以我现在已经清理了文件夹。 "%%~nxb____%%~xa" 我需要把文件名放在这里,但是我不知道如何获取信息。我一直在看%%f。但是,我不确定如何在上面的代码中添加它。不是我有点失落。

【问题讨论】:

  • 您的代码在替换字符时不会尝试重命名文件,因此是通过在文件前面加上父目录名称来重命名文件。在这样做之前,您已经离开 echoing 并且还 Echoed 每个 Rename,请 edit your question 向我们展示输出内容
  • 还值得一提的是,您生成的文件与问题标题中的描述不匹配。这些文件看起来像这样,2020_04_0814_09_07_TEST__TEST__.mp42020_04_0814_09_07_TEST__TEST__.json2020_04_0814_09_07_TEST__TEST__.aaf
  • 嗨,没错,这就是我试图修复它的原因。我一直在尝试编辑此代码。但它还没有按照我想要的方式工作。
  • 所以,请按照已经建议的方式编辑您的问题,以准确地向我们展示您正在使用什么,原始文件和目录是什么以及生成的文件和目录是什么,并完成输出你的控制台窗口。您不是该站点特定部分的第一个要求在文件前加上其父目录名称的人。您是否使用过搜索工具,您找到了哪些问题/代码?您说您已尝试编辑代码,您能否向我们提供您尝试过的内容?还是我们应该猜测,因此不提供相同或相似的?
  • 3.对于for 元变量,您应该避免使用#@ 之类的字符;虽然它们有效,但它们只是让代码更难阅读,所以最好使用for /?的帮助文本中显示的字母...

标签: batch-file cmd


【解决方案1】:

解决方案:

rem - Rename files based on folder name
for /d %%D in (*) do (
  pushd "%%D"
  for /r %%F in (*) do (
    for %%P in ("%%F\..") do (
      ren "%%F" "%%~nxP_%%~nxF"

    )
  )
  popd
)
popd

【讨论】:

    猜你喜欢
    • 2018-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多