删除文件名中的特定数字

问题描述

我正在构建一个批处理文件文件名中可能有也可能没有 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' 中的命令行作为附加参数附加。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...