如何解决删除文件名中的特定数字
我正在构建一个批处理文件,文件名中可能有也可能没有 10 位数字。如果是 10 位数字,我想删除第一个数字。
更具体地说,前导数字可能是 1,在这种情况下,我希望将其删除。
示例文件名:Softphone Test3_2020-12-08 15-23_13216549871.WAV
所需的输出:Softphone Test3_2020-12-08 15-23_3216549871.WAV
在某些情况下,可能只有一个没有前导 1 的 9 位数字,这是可以的,应该保持不变。
如何实现?
解决方法
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
rem The following settings for the source directory,destination directory,target directory,rem batch directory,filenames,output filename and temporary filename [if shown] are names
rem that I use for testing and deliberately include names which include spaces to make sure
rem that the process works using such names. These will need to be changed to suit your situation.
SET "sourcedir=u:\your files"
SET "destdir=u:\your results"
FOR /f "delims=" %%b IN ('dir /b /a-d "%sourcedir%\*.wav" ') DO (
SET "namepart=%%~nb"
IF "!namepart:~-11,1!" neq "_" ECHO REN "%sourcedir%\%%b" "!namepart:~0,-11!!namepart:~-10!.wav"
)
GOTO :EOF
提议的重命名已echo
。将 ECHO REN
更改为 REN
以执行实际重命名。
我建议这个任务的代码:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
for /F "delims=" %%I in ('%SystemRoot%\System32\where.exe "*_???????????.wav" 2^>nul') do (
set "FullName=%%I"
set "FileName=%%~nxI"
setlocal EnableDelayedExpansion
ren "!FullName!" "!FileName:~0,-15!!FileName:~-14!"
endlocal
)
endlocal
它仅处理文件名末尾带有十位数字的 WAV 文件,并通过从十位数字中删除第一位来重命名这些文件。
要了解使用的命令及其工作原理,请打开 command prompt 窗口,在那里执行以下命令,并仔细阅读为每个命令显示的所有帮助页面。
echo /?
endlocal /?
for /?
ren /?
set /?
setlocal /?
where /?
阅读有关 Using command redirection operators 的 Microsoft 文档以了解 2>nul
。重定向运算符 >
必须在 FOR 命令行上用脱字符符 ^
转义,以便在 Windows 命令解释器在执行命令 之前处理此命令行时被解释为文字字符FOR 在后台启动的单独命令进程中执行嵌入的 where
命令行,%ComSpec% /c
和 '
中的命令行作为附加参数附加。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。