使用批处理脚本

时间:2018-05-31 09:22:27

标签: batch-file

寻找批量脚本来重命名文件夹。

名称类似于My.File.Is.Not.Really.Mine.txt,Another.File.Not.Mine.txt等。

想将其重命名为My File Is Not Really Mine.txt,另一个文件不是Mine.txt

2 个答案:

答案 0 :(得分:1)

以下是基于相对模糊的偏离主题请求的变量扩展和替换的简单示例:

@For %%A In ("ChangeMe\*.*.*") Do @Call :Sub "%%A"
@Exit /B

:Sub
@Set "fName=%~n1"
@Ren %1 "%fName:.= %%~x1"

您需要将ChangeMe\替换为包含文件的完整或相对目录名,或者完全删除ChangeMe\并将批处理文件放在包含这些文件的目录中。

此首选方法使用Where命令通配符匹配:

@For /F Delims^=^ EOL^= %%A In ('Where "ChangeMe:*.*.*"') Do @Call :Sub "%%A"
@Exit /B

:Sub
@Set "fName=%~n1"
@Ren %1 "%fName:.= %%~x1"

您需要将ChangeMe替换为包含文件的完整或相对目录名,或者将ChangeMe替换为.,并将批处理文件放在保存这些文件的目录中文件。

答案 1 :(得分:0)

您可以使用此简单批处理文件执行此任务:

@echo off
for /F "eol=| delims=" %%I in ('dir * /A-D-H /B 2^>nul') do if not "%~f0" == "%%~fI" call :RenameFile "%%I"
goto :EOF

:RenameFile
set "NewFileName=%~n1"
if not defined NewFileName goto :EOF
set "NewFileName=%NewFileName:.= %"
if "%NewFileName%" == "%~n1" goto :EOF
echo Renaming "%~nx1" to "%NewFileName%%~x1" ...
ren %1 "%NewFileName%%~x1"
goto :EOF

FOR 命令行中的第一个 IF 条件可避免在具有Rename.Files.bat之类的名称不太可能的情况下重命名批处理文件本身并将其存储在要重命名的文件的目录。

第二个 IF 条件是子例程RenameFile中的第一个 IF ,可防止对文件名以点开头的文件进行错误的文件名处理有一个真正的文件扩展名(最后一个点之后的字符串),如.htaccess。此类文件名在Windows上不典型,因为它被解释为没有文件名的文件,只是文件扩展名。但是这些文件可以存在于Unix / Linux上,这些文件存储在Unix / Linux上隐藏的Windows驱动器上。 Unix / Linux文件系统没有隐藏属性。如果文件名以点开头,则文件在Unix / Linux上被解释为隐藏。

第三个 IF 条件使用空格替换所有点后将当前文件名与文件名进行区分大小写,如果新文件名与当前文件名相同,则退出子例程。

注1: *.*.**.*等通配符模式由 DIR FOR 解释,是cmd.exe的内部命令,就像*一样,因此匹配所有(非隐藏)文件,而不仅仅是文件名中包含至少两个或一个点的文件。

要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。

注2:如果文件的新名称与文件的当前名称相同,则命令 REN 不执行任何操作。因此,如果没有 ECHO 命令行接近批处理文件,则不需要第三个 IF 条件。

  • call /?
  • dir /?
  • echo /?
  • for /?
  • goto /?
  • if /?
  • ren /?
  • set /?

另见Where does GOTO :EOF return to?