【问题标题】:Batch Command for Renaming files in folders用于重命名文件夹中文件的批处理命令
【发布时间】:2020-10-30 00:20:24
【问题描述】:

只是想知道是否有人可以帮助我。通常我很容易找到一些我需要的代码来操作它,但如果我必须从头开始,那就太可怕了。

我是一名教师,我希望将所有文件标记为一致,因为我必须将它们发送出去。

我想知道有没有办法编写一个批处理文件来执行以下操作:

我有一个主题文件夹,在每个主题文件夹中都有学生姓名、他们正在做的小册子,然后是 .doc 或 .docx 文件。

我希望批处理文件将文件重命名为 Subject_Book#_Name.doc 或 .docx

我的文档/主题/学生/书 1/.doc

\Math A\Jim Book\Book 1 Addition\Addition Booklet.docx 
\Math A\Jim Book\Book 2 Subtraction\Subtraction Booklet.docx
Into
\Math A\Jim Book\Book 1 Addition\Math A_Addition Booklet_Jim Book.docx 
\Math A\Jim Book\Book 2 Subtraction\Math A_Subtraction Booklet_Jim Book.docx 
\Math A\Frank Sims\Book 1 Addition\Addition Booklet.docx 
\Math A\Frank Sims\Book 2 Subtraction\Subtraction Booklet.docx 
Into
\Math A\Frank Sims\Book 1 Addition\Math A_Addition Booklet_Frank Sims.docx 
\Math A\Frank Sims\Book 2 Subtraction\Math A_Subtraction Booklet_Frank Sims.docx 

现在我不介意我是否必须将 bat 文件复制到每个文件夹中,如果某个了不起的人可以帮助我并将其放在主要主题文件夹中。

我确实在其他地方看到过类似的东西,但这仍然需要很长时间。

title Rename Bat
echo This bat must be in the folder that 
echo contains the files to be renamed.
echo Enter File Name
set /p old=
echo Enter New Name
set /p new=
ren "%old%" "%new%"
echo Done
pause```

【问题讨论】:

  • 您能否在您的帖子中添加两个示例文件夹列表,供几个想象中的学生使用(显示之前的列表和所需的列表之后)。包括从My Documents 往下的所有相关文件夹路径和文件。
  • Math A\Jim Book\Book 1 Addition\Addition Booklet.docx Math A\Jim Book\Book 2 Subtraction\Subtraction Booklet.docx Math A\Frank Sims\Book 1 Addition\Addition Booklet.docx数学 A\Frank Sims\Book 2 减法\减法 Booklet.docx
  • 那么,Frank Sim 的加法小册子将被重命名为 Math A_Book 1_Frank Sims.docx?
  • 是的,就是这样。我也把它放在主帖中,以便更容易看到。第一次用这个
  • PS 我建议在尝试任何建议的解决方案之前压缩整个顶级文件夹并安全地存储在某个地方。我相信你还是会去的。

标签: batch-file file-rename batch-rename


【解决方案1】:

正如 @jarmod 在 cmets 中提到的:在运行此操作之前,请保留原始文件的安全副本!您需要备份以防万一。

如果您从主目录中运行它,应该会这样做。它将遍历子目录中的所有匹配文件并复制到当前(主)目录中。

@echo off
Setlocal enabledelayedexpansion

Set "Pattern=\"
Set "Replace=_"
set "RemovePath=!CD:%Pattern%=%Replace%!_"

For /r %%# in ("*.doc?") Do (
    Set "File=%%~f#"
    set "trimfile=!File:%Pattern%=%Replace%!"
    set "trimfile=!trimfile:%RemovePath%=% %!"

    REM If you remove "echo" from the next line, the copy will happen
    echo copy "!File!" "!trimfile!"
)

Pause

它的作用:

  1. 设置一些替换模式。即,您想将反斜杠 \ 替换为下划线 _
  2. 捕获当前目录,以便我们稍后在文件名中替换它。
  3. 使用完整路径遍历所有匹配文件,并将路径中的\ 替换为_
  4. 从结果字符串中删除路径,因为我们只想使用下一级目录名开始新文件名。
  5. 回显删除 echo 关键字后将运行的命令。*

注意:最重要的一行是使用echo 命令“禁用”,以便您安全运行。如果你觉得不错,去掉echo这个词,copy操作就会发生。

【讨论】:

  • 谢谢你们。我尝试在文件夹的副本上运行 bat 文件,但我得到“系统找不到指定的文件”
  • 提供您的文件之一的完整路径。整个事情,驱动器号和所有。还要说明您如何尝试运行我提供的内容。我假设您将上面的代码复制到一个批处理文件中,将该批处理文件保存在文件根目录的主目录中,然后从命令行运行它。
  • D:\mligh7\我的文档\1。 Class\Class\LSK\Jim Book\Book 1 WHS\Safety Assessment 2020.V1.Final.docx 我尝试在 LSK 文件夹和 Class 文件夹中运行 bat 文件,但仍然没有区别。是的,将其复制到批处理文件中并从命令提示符中复制。我的一些学生也做了一些奇怪的事情,如果这也会产生影响,将 (1) 放入文件名中。
  • 我认为您应该在循环中的每一行之后放置一些echo 语句,以记录在前一个语句中设置的变量。这是我知道查看是否有特定文件名失败的唯一方法。但是我测试了几个没有问题的奇怪的。你还没有说你在这个过程中的哪里得到了错误,所以我不知道它在失败之前是迭代了几个文件还是根本没有。越详细越好。
  • 设置“文件=%~f#”设置“trimfile=!文件:\=_!”设置“trimfile=!trimfile:D:_mligh7_My Documents_1.Class_LSK_=!”拷贝文件! !trimfile!所以我可以看到它没有到达它需要的子文件夹它只是到达它所在的文件夹
【解决方案2】:

一个过度劳累而被低估的老师!

@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir\t w o"
FOR /f "delims=" %%a IN ( 
 'dir /s /b /a-d "%sourcedir%\*.doc" "%sourcedir%\*.docx" '
 ) DO for %%w in ("%%~dpa.") do for %%g in ("%%~dpw.") do for %%q in ("%%~dpg.") do ECHO REN "%%a" "%%~nxq_%%~na_%%~nxg%%~xa"
)

GOTO :EOF

您需要更改sourcedir 的设置以适应您的情况。该列表使用适合我的系统的设置。

希腊语?

不,梵文。

首先,以/b 基本形式列出dir/s 带有子目录,/a-d,但没有两个文件掩码的匹配目录名。

处理结果列表,忽略默认分隔符 ("delims=") 到 %%a,然后获取 %%a (%%~dpa) 的 Drive 和 Path 并附加 .计算结果为没有尾部反斜杠的父目录名称。这似乎是一个文件名,所以%%~dpw 是祖父目录名,%%~dpq 是曾祖父目录名。

然后我们需要做的就是将 %%a 中的文件名重命名为 ggp-Name 和 eXtension (%%~nxq) 下划线 原始文件的名称(%%~na) 下划线 祖父母-Name 和 eXtension (%%~nxg) eX原始文件的张力 (%%~xa)

所需的 REN 命令仅用于测试目的ECHOed。 验证命令正确后,将ECHO REN 更改为REN 以实际重命名文件。

注意:这是一次操作,除非你真的想要像\Math A\Jim Book\Book 2 Subtraction\Math A_Math A_Subtraction Booklet_Jim Book_Jim Book.docx
这样的文件名,然后是\Math A\Jim Book\Book 2 Subtraction\Math A_Math A_Math A_Subtraction Booklet_Jim Book_Jim Book_Jim Book.docx
...

要运行批处理,您需要做的就是执行'd:\wherever\you put\thisbatch",或者如果您将thisbatch.bat 放在作为path 元素的目录中,那么只需thisbatch 就足够了。

如果您将sourcedir 设置为.(即一个句号),那么批处理将从您当前的目录执行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-10
    • 2011-12-02
    • 1970-01-01
    • 2014-02-26
    • 2016-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多