只是想知道是否有人能帮我。通常我很难找到一些需要操作的代码,但如果必须从头开始,那就太可怕了。
我是一名教师,希望所有的文件都有一致的标签,因为我必须把它们发送出去。
我想知道的是,有一种方法可以编写一个批处理文件来完成以下操作:
我有一个主题文件夹,在每个主题文件夹中,我都有学生的名字,他们正在做的小册子,然后是.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
它的作用:
- 设置一些替换模式。也就是说,您想用下划线
_
替换反斜杠 - 捕获当前目录,以便稍后在文件名中替换它
- 使用完整路径遍历所有匹配的文件,并将路径中的
替换为
_
- 从结果字符串中删除路径,因为我们只想启动新的文件名和下一级目录名
- 回显删除
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
设置为.
(也就是说,一个完整的停止(,那么批处理将从当前目录中执行。