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

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

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

【删除前三位字符中的#号! 删除后六位随机数字】
感谢!感谢!感谢!

本帖最后由 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
复制代码
目的,学习批处理

TOP

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
复制代码

TOP

回复 2# hlzj88


   执行出错……

TOP

本帖最后由 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. }
复制代码

TOP

回复 4# grain99

我测试没有问题,win7。你可以把 move /y 替换为echo 看看什么情况
目的,学习批处理

TOP

回复 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. }
复制代码

TOP

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

TOP

回复 4# grain99


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

如果仍然看不到报错信息,请把你测试用的文件和bat脚本打包上传到网盘以便他人帮忙排查。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 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
复制代码

TOP

  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. )
复制代码

TOP

返回列表