批处理文件,用于重命名带有前缀的文件夹中的文件

时间:2018-01-30 08:56:19

标签: batch-file

工作时,我经常需要将包含多种不同文件类型的模板目录复制到服务器上与我目前正在处理的项目相对应的位置。

所以,在路径中

C:/Server/1010 Mr Customer/Housing

我有几个文件,例如

XX housing.dwg
XX data.doc
XX plan.dwg

" 1010顾客先生"是一个项目目录," Housing"是一个模板目录,当我开始工作时,我复制到项目,例如,住房分配。有多个模板目录。

我想创建一个批处理文件,该文件将被复制到一个Housing目录中,并以一种替换它的方式重命名每个文件" XX"用" 1010顾客先生"在这个文件夹中。

所以它应该在它的路径中隔离文件夹名称,但不是上面的第一步,因为那个总是被命名为" Housing"或其他一些模板名称。

结果就是这个

C:/Server/1010 Mr Customer/Housing
1010 Mr Customer housing.dwg
1010 Mr Customer data.doc
1010 Mr Customer plan.dwg
renamer.bat

谢谢!

2 个答案:

答案 0 :(得分:0)

如果我正确理解了您的问题,您希望获取目录Housing中的所有文件并重命名以删除XX并包含之前的文件夹名称,在本例中为1010 Mr Customer将生成名称1010 Mr Customer Housing.*此示例仅搜索当前目录中的.dwg.doc文件。要添加文件,只需添加,*.extention name或者为dir中的所有文件制作文件,只需将其设为.*

注意!! 此脚本假定它将根据您的示例位于第3个目录中。

<强> renamer.cmd

@echo OFF
setlocal enabledelayedexpansion
set mydir="%~p0"
set "mydir=%mydir:\=;%"
set "mydir=%mydir: =_%"

for /F "tokens=2 delims=;" %%b IN (%mydir%) DO (
 set name=%%b
 set name=!name:_= !
for %%i in (*.dwg,*.doc) do (set "file=%%i"
 set "remove=!file:~3!"
 if "!file:~0,3!"=="XX " echo move "!file!" "!name! !remove!")
 )
)
endlocal

这将采用以前的文件夹名称并将其存储为名为%name%的变量,将每个文件存储在名为%file%的变量中,从文件名中删除前3个字符,即{{1} (是的,删除中有一个空格)然后我们检查文件是否实际上以XX开头,以便不会错误地重命名其他文件,如果测试成功,我们会进行重命名。

注意! 这将回显重命名,实际执行重命名,删除底部XX语句行中的回显。此外,我没有包含任何路径,因此除非您包含路径,否则您需要将此脚本放在if目录中。然后,如果您的Housing可以是大写或小写,则需要在if之后添加XX以使其不区分大小写。

答案 1 :(得分:0)

Thank you for your response.

I've tried pasting it in a txt file, then named it renamer.cmd, as well as renamer.bat, but id didn't seem to work. I run windows 7 machine.

Here's the code that I've compiled from couple of other scripts I've found around here, and it seems to work so far.

Note: I've decided to leave out the number 1010. I know it's frankensteined a bit, so to say, but I'm not looking for aestethics at this point. Maybe you could look at it and point out if there's a possible problem?

so, the program works, when pasted in housing directory, like this:

C:/Server/1010 Mr Customer John second project/Housing
XX housing.dwg
XX data.doc
XX plan.dwg


Mr Customer second housing.dwg
Mr Customer second data.doc
Mr Customer second plan.dwg

and here's the code:

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
SET old=XX
for %%* in (..) do set new=%%~nx*
set new=%new:~5%
for /f "tokens=*" %%f in ('dir /b *.*') do (
  SET newname=%%f
  SET newname=!newname:%old%=%new%!
  move "%%f" "!newname!"
)

Thank you for help!

++