用于重命名文件夹中文件的批处理命令



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

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

我想知道的是,有一种方法可以编写一个批处理文件来完成以下操作:

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

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

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

Math AJim BookBook 1 AdditionAddition Booklet.docx 
Math AJim BookBook 2 SubtractionSubtraction Booklet.docx
Into
Math AJim BookBook 1 AdditionMath A_Addition Booklet_Jim Book.docx 
Math AJim BookBook 2 SubtractionMath A_Subtraction Booklet_Jim Book.docx 
Math AFrank SimsBook 1 AdditionAddition Booklet.docx 
Math AFrank SimsBook 2 SubtractionSubtraction Booklet.docx 
Into
Math AFrank SimsBook 1 AdditionMath A_Addition Booklet_Frank Sims.docx 
Math AFrank SimsBook 2 SubtractionMath 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```

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

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

@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操作

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

@ECHO OFF
SETLOCAL
SET "sourcedir=U:sourcedirt 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但没有两个文件掩码的匹配目录名。

处理结果列表,忽略%%a的默认分隔符("delims="(,然后取%%a(%%~dpa(的D驱动器和P路径,并附加.,其计算结果为父目录名,不带尾部反斜杠。这似乎是一个文件名,因此%%~dpw是祖父母的目录名,%%~dpq是曾祖父母的目录名。

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

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

注意:这是一个一次性操作,除非您真的想要像Math AJim BookBook 2 SubtractionMath A_Math A_Subtraction Booklet_Jim Book_Jim Book.docx
然后Math AJim BookBook 2 SubtractionMath A_Math A_Math A_Subtraction Booklet_Jim Book_Jim Book_Jim Book.docx
这样的文件名。。。

要运行批处理,您所需要做的就是执行'd:whereveryou putthisbatch",或者如果您将thisbatch.bat放在path的一个元素目录中,那么仅thisbatch就足够了。

如果将sourcedir设置为.(也就是说,一个完整的停止(,那么批处理将从当前目录中执行。

最新更新