标题: [其他] [已解决]批处理bat删除歌曲名前的"数字"与"标点符号" [打印本页]
作者: skpkmon 时间: 2025-1-6 13:21 标题: [已解决]批处理bat删除歌曲名前的"数字"与"标点符号"
本帖最后由 skpkmon 于 2025-1-7 13:51 编辑
请问各位大师,如何利用bat批次资料夹内的歌曲去除"数字"与"标点符号"?
01 - 断肠梦.dff --->断肠梦.dff
01.青春梦里人.wav --->青春梦里人.wav
作者: new_user 时间: 2025-1-6 15:20
# 设置要遍历的目录
$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'"
}
}
作者: aloha20200628 时间: 2025-1-6 16:11
本帖最后由 aloha20200628 于 2025-1-6 18:18 编辑
回复 1# skpkmon
以下代码存为 test.bat 运行,但不要存于歌曲文件所在目录下,代码中假定歌曲名内不再有前缀所包含的"数字"与"标点符号",假定歌曲文件所在目录(须为全路径)为 d:\music 可由楼主自定义,其中变量 _c 定义须删除的"数字"与"标点符号",可由楼主因需增减- @echo off &cd /d "d:\music" &setlocal &set "_c=0123456789-_. "
- for %%F in (*) do for /f "delims=%_c%" %%a in ("%%~nF") do if /i "%%a" neq "%%~nF" ren "%%F" "%%a%%~xF"
- pause &exit/b
复制代码
若歌曲名内有前缀所包含的"数字"与"标点符号",须改用以下版本,其中变量 _c 定义须删除的"数字"与"标点符号",可由楼主因需增减- @echo off &cd /d "d:\music" &setlocal &set "_c=0123456789-_. "
- for %%F in (*) do (
- set "_a=%%~nF" &setlocal enabledelayedexpansion &(call :cut#H)
- if /i "%%~nF" neq "!_a!" ren "%%F" "!_a!%%~xF" &endlocal)
- pause &exit/b
- :cut#H
- if "!_a!"=="" (exit/b) else set "c=!_a:~,1!"
- if "!_c:%c%=!"=="!_c!" (exit/b) else set "_a=!_a:~1!" &goto :cut#H
复制代码
作者: buyiyang 时间: 2025-1-6 19:22
- @echo off
- cd /d "%~dp0"
- set "pre=1234567890.- "
-
- for /f "delims=" %%i in ('dir /b /a-d') do (
- for /f "tokens=* delims=%pre%" %%f in ("%%~nxi") do (
- ren "%%i" "%%f"
- )
- )
- pause
复制代码
作者: aloha20200628 时间: 2025-1-6 20:11
本帖最后由 aloha20200628 于 2025-1-6 20:13 编辑
4楼的 “tokens=* delims=...” 效果不错(实为一条删除字符串前缀的捷径!),但逻辑上有些 ‘怪异’,为何是删除前缀而非后缀呢?
作者: buyiyang 时间: 2025-1-6 22:19
回复 5# aloha20200628
因为for在处理字符串时会首先跳过开头的所有分隔符:- while (*s2 && _tcschr(delims, *s2))
- s2 += 1;
复制代码
作者: skpkmon 时间: 2025-1-7 13:50
谢谢各位高手帮忙、谢谢
作者: y123 时间: 2025-1-7 13:53
回复 2# new_user
这个也是批处理的代码吗?看着不太像啊。
好像说是 批处理无法使用 正则 呀
作者: new_user 时间: 2025-1-7 18:11
回复 8# y123
powershell
作者: y123 时间: 2025-1-7 21:18
回复 9# new_user
原来是高阶呀,我这是刚接触批处理,谢谢解惑
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |