Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.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,正在查找批处理脚本以重命名文件文件夹 名称类似于My.File.Is.Not.Really.Mine.txt、另一个.File.Not.Mine.txt等 要将其重命名为“我的文件不是真正的Mine.txt”,另一个文件不是Mine.txt您可以使用此简单的批处理文件执行此任务: @echo off for /F "eol=| delims=" %%I in ('dir * /A-D-H /B 2^>nul') do if not "%~f0" == "%%~fI" call :Renam

正在查找批处理脚本以重命名文件文件夹

名称类似于My.File.Is.Not.Really.Mine.txt、另一个.File.Not.Mine.txt等


要将其重命名为“我的文件不是真正的Mine.txt”,另一个文件不是Mine.txt

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

@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:类似于
*..*.
*.
的通配符模式由DIRFOR解释,这是
cmd.exe
的内部命令,就像
*
一样,因此匹配所有(非隐藏)文件,而不仅仅是文件名中至少包含两个或一个点的文件

要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面

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

  • 呼叫/?
  • dir/?
  • echo/?
  • 获取/?
  • goto/?
  • 如果/?
  • ren/?
  • 设置/?

另请参见

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

(“ChangeMe\*.*.*)中%%A的
@执行@Call:Sub“%%A”
@退出/B
:Sub
@设置“fName=%~n1”
@Ren%1“%fName:.=%%~x1”
您需要用保存文件的完整或相对目录名替换
ChangeMe\
,或者完全删除
ChangeMe\
,并将批处理文件放在保存这些文件的目录中


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

@For/F Delims^=^EOL^=%%A In('Where“ChangeMe:**.*.*')Do@Call:Sub“%%A”
@退出/B
:Sub
@设置“fName=%~n1”
@Ren%1“%fName:.=%%~x1”

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

这不是查找现有脚本的站点;这是为了问编程问题,谢!您的问题有点不适合堆栈溢出,因为其目的不是提供外包编程。如果你有一个关于如何实现你想要的东西的具体问题,请问这个+1用于首选方法,该方法同样适用于文件名,如
.htaccess
,在Windows上不常见,在FAT32和exFAT驱动器上也可以正常工作。仍在使用Windows XP的读者注意:默认情况下,该命令在Windows XP上不可用。默认情况下,在Windows Vista或Windows Server 2003以及任何更高版本的Windows上,WHERE都可用。那么,从WindowsServer2003中也可以复制到仍然使用WindowsXP的PC上使用。