Board logo

标题: [文本处理] 批处理如何删除字符串前三位的固定字符,删除后6位的数字? [打印本页]

作者: grain99    时间: 2022-10-16 14:18     标题: 批处理如何删除字符串前三位的固定字符,删除后6位的数字?

eg:
#听过吗,这是一个动人的#歌曲-234769.MP3                变成=》                         听过吗,这是一个动人的#歌曲-.MP3
哈哈#是的,我喜欢这个#很不错-414321.MP3                变成=》                         哈哈是的,我喜欢这个#很不错-.MP3

【删除前三位字符中的#号! 删除后六位随机数字】
感谢!感谢!感谢!
作者: hlzj88    时间: 2022-10-16 15:09

本帖最后由 hlzj88 于 2022-10-16 15:14 编辑
  1. @echo off&&setlocal enabledelayedexpansion
  2. for /f "tokens=1,2 delims=-" %%i in ('dir /b/on *.mp3') do (
  3. set "wj=%%i"
  4. set qs=!wj:~0,4!
  5. set qs=!qs:#=!
  6. set wj=!wj:~4!
  7. move /y "%%i-%%j" !qs!!wj!.mp3
  8. )
  9. pause
复制代码

作者: aloha20200628    时间: 2022-10-16 16:10

a.txt
#听过吗,这是一个动人的#歌曲-234769.MP3
哈哈#是的,我喜欢这个#很不错-414321.MP3
  1. @echo off
  2. for /f "tokens=1-4 delims=,-." %%1 in (a.txt) do for /f "tokens=1-2 delims=#" %%a in ("%%1") do echo,%%a%%b,%%2-.%%4
复制代码

作者: grain99    时间: 2022-10-16 17:23

回复 2# hlzj88


   执行出错……
作者: xp3000    时间: 2022-10-16 18:18

本帖最后由 xp3000 于 2022-10-16 18:24 编辑
  1. @if (0)==(0) echo off
  2. dir /b *.ape *.flac *.wav *.mp3 | cscript -nologo -e:jscript "%~0"
  3. pause&exit/b
  4. @end
  5. fso = new ActiveXObject("Scripting.FileSystemObject");
  6. while (!WSH.StdIn.AtEndOfStream) {
  7.     line = WSH.StdIn.ReadLine();
  8.     f=fso.GetFile(line);
  9.     s1= line.replace(/^(.{3})[^\.]+\..+$/mg, '$1').replace(/#/mg, '');
  10.     s2= line.replace(/^.{3}([^\.]+\..+)$/mg, '$1').replace(/-[^\.]{6}/g, '-');
  11.     if(fso.FileExists(s1+s2))
  12.     WScript.Echo('\n文件: ' +line+'命名失败!\n')
  13.     else
  14.     f.Move(s1+s2);
  15. }
复制代码

作者: hlzj88    时间: 2022-10-16 18:25

回复 4# grain99

我测试没有问题,win7。你可以把 move /y 替换为echo 看看什么情况
作者: 小白龙    时间: 2022-10-16 18:47

回复 6# hlzj88
  1. #@&cls&powershell "type '%~0'|out-string|iex"&pause&exit
  2. gci *.mp3 |
  3. foreach {
  4. $a = $_.BaseName.ToCharArray()
  5. $a1 = $a[0 .. 2] -replace '#'
  6. $a2 = $a[3 .. ($a.Count - 7)]
  7. $nn = (-join $a1) + (-join $a2)
  8. ren $_ -NewName $($nn + $_.Extension)
  9. }
复制代码

作者: qixiaobin0715    时间: 2022-10-17 09:11

楼主应当将需求表达清楚些,君不见大家的理解各不相同。
有人理解为是文件;
有人理解为是文本文件中的内容;
而按楼主的说法是字符串。
到底是什么呢?
作者: Batcher    时间: 2022-10-17 10:06

回复 4# grain99


请参考Q-01观察一下哪行代码在报错以及详细的报错信息:
https://mp.weixin.qq.com/s/Koje4FufWxWBs7ioDy_LJA

如果仍然看不到报错信息,请把你测试用的文件和bat脚本打包上传到网盘以便他人帮忙排查。
作者: qixiaobin0715    时间: 2022-10-19 10:24

本帖最后由 qixiaobin0715 于 2022-10-19 10:30 编辑

如果按字符串处理:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for %%a in (#听过吗,这是一个动人的#歌曲-234769.MP3
  4.             哈哈#是的,我喜欢这个#很不错-414321.MP3) do (
  5.     set str=%%a
  6.     set str1=!str:~,3!
  7.     echo,!str1:#=!!str:~3,-10!!str:~-4!
  8. )
  9. pause
复制代码

作者: hfxiang    时间: 2022-10-19 11:02

  1. @echo off
  2. rem 保存为ANSI格式
  3. setlocal enableDelayedExpansion
  4. for /f %%a in ('dir /b/s *.mp3') do (
  5. set "fn=%%~na"
  6. set "pn=!fn:~,3!"
  7. move /y "%%~a" "%%~dpa!pn:#=!!fn:~3,-6!%%~xa"
  8. )
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2