Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 批处理文件以重命名带有前缀的文件夹中的文件_Batch File - Fatal编程技术网

Batch file 批处理文件以重命名带有前缀的文件夹中的文件

Batch file 批处理文件以重命名带有前缀的文件夹中的文件,batch-file,Batch File,在工作时,我经常需要将包含多个不同文件类型的模板目录复制到服务器上与我当前正在处理的项目相对应的位置 所以,在一条小路上 C:/Server/1010 Mr Customer/Housing 例如,我有一些文件 XX housing.dwg XX data.doc XX plan.dwg 其中,“1010 Mr Customer”是一个项目目录,“Housing”是一个模板目录,当我开始处理(例如)住房分配时,我会将其复制到项目中。有多个模板目录 我想创建一个批处理文件,该文件将被复制到一个

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

所以,在一条小路上

C:/Server/1010 Mr Customer/Housing
例如,我有一些文件

XX housing.dwg
XX data.doc
XX plan.dwg
其中,“1010 Mr Customer”是一个项目目录,“Housing”是一个模板目录,当我开始处理(例如)住房分配时,我会将其复制到项目中。有多个模板目录

我想创建一个批处理文件,该文件将被复制到一个房屋目录中,并重命名每个文件,使其在该文件夹中将“XX”替换为“1010 Mr Customer”

因此,它应该在路径中隔离文件夹名称,但不是上面的第一步,因为该文件夹名称始终命名为“Housing”或其他模板名称

结果就是这样

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

谢谢

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

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

rename.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个字符,即
XX
(是的,删除中有空格)然后我们检查文件是否以
XX
开头,以避免错误地重命名其他文件,如果测试成功,我们将进行重命名


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

感谢您的回复

我试着将它粘贴到一个txt文件中,然后将它命名为renamer.cmd和renamer.bat,但id似乎不起作用。我运行Windows7计算机

这是我从其他几个脚本中编译的代码,我在这里找到了,到目前为止它似乎还可以工作

注:我决定省略数字1010。我知道这有点像弗兰肯斯坦,可以这么说,但我现在不是在寻找美学。 也许你可以看看它并指出是否有可能的问题

因此,程序在粘贴到housing目录时工作,如下所示:

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
下面是代码:

@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!"
)
谢谢你的帮助


++

我会在上午查看您的问题,并帮助您找到解决方案。