问题描述
只是想知道是否有人可以帮助我。通常,我很想找到一些代码,我需要一个代码来操作它,但是如果我必须从头开始,那太可怕了。
我是一名老师,希望所有文件都带有一致的标签,就像我必须将它们发送出去一样。
我有一个主题文件夹,在每个主题文件夹中都有学生的名字,他们在一个文件夹中做的小册子,然后有一个.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```
解决方法
正如@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:\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
的设置。清单使用适合我系统的设置。
希腊语?
不,梵语。
首先,以dir
基本形式/b
列出/s
,其中包含子目录/a-d
,但没有两个文件掩码的匹配目录名。
处理结果列表,将默认定界符("delims="
)设置为%%a
,然后获取D
的{{1}} riv和P
ath({ {1}}并附加%%a
,其结果为父目录名称,不带反斜杠。这似乎是文件名,因此%%~dpa
是祖父母目录名称,而.
是曾祖父母目录名称。
然后我们要做的就是将%%~dpw
中的文件名重命名为ggp-%%~dpq
ame和e %%a
扩展名(N
)下划线原始文件的名称(X
)下划线祖父母-%%~nxq
相同和e %%~na
扩展名(N
)e {{1 }}原始文件的扩展名(X
)
仅出于测试目的%%~nxg
对所需的REN命令进行了处理。 验证命令正确无误后,将X
更改为%%~xa
,以实际重命名文件。
警告:这是一次只能执行的操作,除非您真的想要ECHO
然后是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
元素的目录中,则只需{{1} }就足够了。
如果将'd:\wherever\you put\thisbatch"
设置为thisbatch.bat
(即一个句号),则将从当前目录中的任何一个执行批处理。