批量删除文件名中的通用字符
关于批量删除文件名中特定字符串前的内容批处理改进
批量删除文件名中特定字符后内容
批量删除文件名后2个字符,我的文件是:首先一个大的文件夹,然后子文件夹,子文件里面有图片文件。
把下面代码用记事本保存为
如何批量删除文件名最后几位字符
批量删除文件名中的通用字符
关于批量删除文件名中特定字符串前的内容批处理改进
批量删除文件名中特定字符后内容
批量删除文件名后2个字符,我的文件是:首先一个大的文件夹,然后子文件夹,子文件里面有图片文件。
把下面代码用记事本保存为
如何批量删除文件名最后几位字符
批处理有着具有非常强大的字符串处理能力,其功能绝不低于C语言里面的字符串函数集。批处理中可实现的字符串处理功能有:截取字符串内容、替换字符串特定字段、合并字符串、扩充字符串等功能。下面对这些功能一一进行讲解。
截取字符串可以说是字符串处理功能中最常用的一个子功能了,能够实现截取字符串中的特定位置的一个或多个字符。举例说明其基本功能:
从第4个字符开始截取5个字符:lo wo
从倒数第14个字符开始截取5个字符: come
::-表示字符串右边的意思, -3表示从字符串右边为0,向左移动3个位置
for循环的"/f"参数表示for语句以解析方式工作,如:
options用于设置文本匹配选项;
source指定了文本的来源;
statement 指定了在文本匹配时要执行的操作;
source中的每一行文本被当做一个记录进行处理,不同的字段由特定的字符分隔开(默认的分隔符是制表符和空格);
eol=; 忽略以;打头的那些行;
tokens=2,3*将每行的第二个和第三个符号传递给for函数体;即截取第二列、第三列、第三列后面的列,第二列由%%i表示,第三列由i的下一个字母k,即变量%%j表示,剩下的部分下%%k表示;
delims=,用逗号和空格分隔符号.
对于带有空格的文件名,用户需要用双括号将文件名括起来。为了用这种方式来使用双引号,还需要使用usebackq选项,否则,双引用会被理解成是用作定义某个要分析的字符串。
%i是for语句中的声明,%j、%k是通过tokens=选项隐式声明的。可以通过tokens=一行指定最多26个符号,
下面以一个小实例简要说明:
现在的任务是要对文件进行批量重命名,重命令的要求是以这个路径的的文件夹名称beau作为前缀,后面用两位数字顺序表示:
批处理运行后,文件全部重命名后的效果为:
无张贴于2018年6月1日,答案的不同之处张贴的单个命令行的,真正删除所有文件和所有文件夹/目录在%PathToFolder%
。这就是使用一个非常简单的单个命令行发布一个答案以删除文件夹的所有文件和子文件夹以及具有更复杂解决方案的批处理文件的原因,解释了为什么所有其他答案都使用DEL于发布和FOR
with RD无法完全清理文件夹。
简单的单命令行解决方案,当然也可以在批处理文件中使用:
该命令行包含三个命令,一个接一个执行。
第一个命令PUSHD将当前目录路径压入堆栈,然后将当前目录移入%PathToFolder%
当前目录以运行命令进程。
默认情况下,这也适用于路径,因为默认情况下启用了命令扩展名,在这种情况下,PUSHD创建一个指向该指定网络资源的临时驱动器号,然后使用新定义的驱动器号更改当前驱动器和目录。
如果指定的目录根本不存在,则PUSHD输出以下错误消息来处理STDERR:
该系统找不到指定的路径。
通过将其重定向2>nul
到设备NUL可以抑制此错误消息。
仅当成功将当前命令处理的当前目录更改为指定目录时,即完全存在指定目录时,才执行下一条命令RD。
该命令RD与选择/Q
和/S
删除一个目录悄悄所有子目录即使指定的目录中,有隐藏属性或具有只读属性设置的文件或文件夹。系统属性从不阻止删除文件或文件夹。
用作任何正在运行的进程的当前目录的文件夹。如果将某个文件夹用作任何正在运行的进程的当前目录,则无法删除该文件夹的整个文件夹树。
当前正在由任何正在运行的进程打开的文件,并在文件打开时设置了文件访问权限,以防止在正在运行的应用程序/进程打开文件时删除文件。这种打开的文件还防止整个文件夹树被删除。
当前用户没有删除文件/文件夹所需的(NTFS)权限的文件/文件夹,这也阻止了对此文件/文件夹的文件夹树的删除。
不删除文件夹的第一个原因是此命令行用于删除指定文件夹的所有文件和子文件夹,而不是文件夹本身。暂时将文件夹作为运行命令过程的当前目录,以防止删除文件夹本身。当然,这将导致通过命令RD输出错误消息:
该进程无法访问该文件,因为该文件正在被另一个进程使用。
文件在这里是错误的术语,因为实际上文件夹正在被另一个进程(执行命令RD的当前命令进程)使用。好吧,实际上,文件夹是文件系统的一个特殊文件,带有文件属性目录,该目录解释了此错误消息。但是我不想太深入地研究文件系统。
与上述所有其他错误消息一样,由于上述三个原因而可能发生的错误消息,可以通过将其2>nul
从句柄STDERR重定向到设备NUL来抑制。
第三个命令POPD与命令RD的退出值无关地执行。
POPD从堆栈中弹出由PUSHD推送的目录路径,并将用于运行命令进程的当前目录更改为该目录,即恢复初始的当前目录。对于UNC文件夹路径,POPD删除由PUSHD创建的临时驱动器号。
注意: 如果初始当前目录是要清除的目录的子目录,则POPD可能会默默地无法还原初始当前目录。在这种特殊情况下,将%PathToFolder%
保留当前目录。因此,建议不要从的子目录运行上面的命令行%PathToFolder%
。
一个更有趣的事实: 通过共享C:\Temp
具有共享名的本地目录Temp
并使用Windows
7上\\%COMPUTERNAME%\Temp\CleanTest
分配给环境变量的UNC路径,我也尝试了使用UNC路径的命令行PathToFolder
。如果运行命令行的当前目录是共享本地目录的子目录使用UNC路径访问的文件夹(即C:\Temp\CleanTest\Subfolder1
,Subfolder1
被RD删除),并且下一个POPD静默失败,无法C:\Temp\CleanTest\Subfolder1
再次创建当前目录,导致Z:\CleanTest
仍保留为正在运行的命令进程的当前目录。因此,在这种非常特殊的情况下,临时驱动器号会保留到更改当前目录为止,例如使用cd
%SystemRoot%
到真正存在的本地目录。不幸的是,如果POPD无法还原初始当前目录,则POPD不会以大于0的值退出,从而仅使用POPD的退出代码就无法检测到这种非常特殊的错误情况。但是,可以假定没有人遇到这种非常特殊的错误情况,因为通常不使用UNC路径来访问本地文件和文件夹。
为了更好地理解所使用的命令,请打开命令提示符窗口,在其中执行以下命令,并仔细阅读每个命令显示的帮助。
解释了这些运算符&&
并&
在此处使用。
接下来,让我们看一下批处理文件解决方案,使用命令DEL删除中的文件%PathToFolder%
,使用FOR和RD删除中的子文件夹%PathToFolder%
。
批处理文件首先确保环境变量PathToFolder
确实是使用文件夹路径定义的,该文件夹路径没有双引号,并且末尾没有反斜杠。最后的反斜杠不是问题,但是文件夹路径中的双引号可能会出现问题,因为PathToFolder
批处理文件执行期间的值与其他字符串连接在一起。
命令DEL用于删除指定目录中的所有文件。
/A
对于处理实际上所有文件都是必需的,包括具有隐藏属性的文件,如果不使用option ,DEL将忽略该属性/A
。
/F
对于强制删除设置了只读属性的文件是必需的。
/Q
对于运行多个文件的安静删除而不需要提示用户是否确实要删除多个文件是必需的。
>nul
必须将写为处理STDOUT的文件名的输出重定向到设备NUL,该设备的NUL由于当前正在打开文件或用户无权删除该文件而无法删除。
2>nul
必须将无法从句柄STDERR删除的每个文件的错误消息输出重定向到设备NUL。
命令FOR和RD用于删除指定目录中的所有子目录。但是for /D
由于FOR在这种情况下忽略了具有隐藏属性集的子目录,因此未使用。因此,for /F
用于在后台启动的单独命令进程中运行以下命令行%ComSpec%
DIR以空格式输出,因为/B
目录条目具有attribute
D
,即指定目录中所有子目录的名称都独立于其他属性,例如无路径的hidden属性。2>nul
用于将在找不到目录的DIR中DIR输出的错误消息从句柄STDERR重定向到设备NUL。
重定向操作>
必须以脱字符转义,^
,在FOR命令行被解释为当Windows命令解释器在执行命令之前处理该命令行文字字符FOR其执行嵌入dir
在一个单独的命令处理命令行启动在后台。
FOR处理捕获的输出,这些输出被写入以处理已启动命令过程的STDOUT,这是没有路径且从不用双引号引起来的子目录的名称。
带选项的FOR会/F
忽略此处不会出现的空行,因为带选项的DIR/B
不会输出空行。
FOR还将忽略以分号开头的行,分号是默认的行尾字符。目录名称可以以分号开头。因此,eol=|
用于将竖线字符定义为行尾字符,名称或目录或文件均不能包含该字符。
FOR将使用空格和水平制表符作为分隔符将行拆分为子字符串,并且仅将第一个用空格/制表符分隔的字符串分配给指定的循环变量I
。由于目录名可以包含一个或多个空格,因此在此不需要拆分行为。因此delims=
,用于定义一个空的定界符列表以禁用行拆分行为并分配给循环变量I
(始终为完整目录名)。
命令FOR为每个目录名称运行命令RD而没有路径,这就是为什么在RD命令行中必须再次指定文件夹路径(与子文件夹名称连接)的原因。
为了了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读每个命令显示的所有帮助页面。