[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[其他] [已解决]批处理bat删除歌曲名前的"数字"与"标点符号"

本帖最后由 skpkmon 于 2025-1-7 13:51 编辑

请问各位大师,如何利用bat批次资料夹内的歌曲去除"数字"与"标点符号"?

01 - 断肠梦.dff --->断肠梦.dff
01.青春梦里人.wav --->青春梦里人.wav


1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

# 设置要遍历的目录
$directory = ".\music"  # 替换为你的文件夹路径

# 获取所有文件
Get-ChildItem -Path $directory -File | ForEach-Object {
    $originalName = $_.BaseName
    $extension = $_.Extension

    # 使用正则表达式去除数字和标点符号
    $newName = $originalName -replace '[0-9]', '' -replace '[^\w\s]', '' -replace '^\s+|\s+$', ''  # 去除数字和标点,去除首尾空格

    # 如果新文件名与原文件名不同,则重命名文件
    if ($newName -ne $originalName) {
        Rename-Item -Path $_.FullName -NewName "$newName$extension"
        Write-Host "重命名 '$originalName' 为 '$newName$extension'"
    }
}

TOP

本帖最后由 aloha20200628 于 2025-1-6 18:18 编辑

回复 1# skpkmon

以下代码存为 test.bat 运行,但不要存于歌曲文件所在目录下,代码中假定歌曲名内不再有前缀所包含的"数字"与"标点符号",假定歌曲文件所在目录(须为全路径)为 d:\music 可由楼主自定义,其中变量 _c 定义须删除的"数字"与"标点符号",可由楼主因需增减
  1. @echo off &cd /d "d:\music" &setlocal &set "_c=0123456789-_. "
  2. for %%F in (*) do for /f "delims=%_c%" %%a in ("%%~nF") do if /i "%%a" neq "%%~nF" ren "%%F" "%%a%%~xF"
  3. pause &exit/b
复制代码
若歌曲名内有前缀所包含的"数字"与"标点符号",须改用以下版本,其中变量 _c 定义须删除的"数字"与"标点符号",可由楼主因需增减
  1. @echo off &cd /d "d:\music" &setlocal &set "_c=0123456789-_. "
  2. for %%F in (*) do (
  3.    set "_a=%%~nF" &setlocal enabledelayedexpansion &(call :cut#H)
  4.    if /i "%%~nF" neq "!_a!" ren "%%F" "!_a!%%~xF" &endlocal)
  5. pause &exit/b
  6. :cut#H
  7.    if "!_a!"=="" (exit/b) else set "c=!_a:~,1!"
  8.    if "!_c:%c%=!"=="!_c!" (exit/b) else set "_a=!_a:~1!" &goto :cut#H
复制代码
1

评分人数

TOP

  1. @echo off
  2. cd /d "%~dp0"
  3. set "pre=1234567890.- "
  4. for /f "delims=" %%i in ('dir /b /a-d') do (
  5.     for /f "tokens=* delims=%pre%" %%f in ("%%~nxi") do (
  6.         ren "%%i" "%%f"
  7.         )
  8.     )
  9. pause
复制代码
1

评分人数

TOP

本帖最后由 aloha20200628 于 2025-1-6 20:13 编辑


4楼的 “tokens=* delims=...” 效果不错(实为一条删除字符串前缀的捷径!),但逻辑上有些 ‘怪异’,为何是删除前缀而非后缀呢?

TOP

回复 5# aloha20200628


    因为for在处理字符串时会首先跳过开头的所有分隔符:
  1. while (*s2 && _tcschr(delims, *s2))
  2.                 s2 += 1;
复制代码

TOP

谢谢各位高手帮忙、谢谢

TOP

回复 2# new_user


这个也是批处理的代码吗?看着不太像啊。

好像说是 批处理无法使用 正则 呀

TOP

回复 8# y123


    powershell

TOP

回复 9# new_user


    原来是高阶呀,我这是刚接触批处理,谢谢解惑

TOP

返回列表