找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 22632|回复: 10

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

[复制链接]
发表于 2022-10-16 14:18:11 | 显示全部楼层 |阅读模式
eg:
#听过吗,这是一个动人的#歌曲-234769.MP3                变成=》                         听过吗,这是一个动人的#歌曲-.MP3
哈哈#是的,我喜欢这个#很不错-414321.MP3                变成=》                         哈哈是的,我喜欢这个#很不错-.MP3

【删除前三位字符中的#号! 删除后六位随机数字】
感谢!感谢!感谢!
发表于 2022-10-16 15:09:56 | 显示全部楼层
本帖最后由 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
复制代码
发表于 2022-10-16 16:10:02 | 显示全部楼层
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
复制代码
 楼主| 发表于 2022-10-16 17:23:13 | 显示全部楼层
回复 2# hlzj88


   执行出错……
发表于 2022-10-16 18:18:03 | 显示全部楼层
本帖最后由 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. }
复制代码
发表于 2022-10-16 18:25:02 | 显示全部楼层
回复 4# grain99

我测试没有问题,win7。你可以把 move /y 替换为echo 看看什么情况
发表于 2022-10-16 18:47:20 | 显示全部楼层
回复 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.        
  8.         $nn = (-join $a1) + (-join $a2)
  9.        
  10.         ren $_ -NewName $($nn + $_.Extension)
  11. }
复制代码
发表于 2022-10-17 09:11:46 | 显示全部楼层
楼主应当将需求表达清楚些,君不见大家的理解各不相同。
有人理解为是文件;
有人理解为是文本文件中的内容;
而按楼主的说法是字符串。
到底是什么呢?
发表于 2022-10-17 10:06:59 | 显示全部楼层
回复 4# grain99


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

如果仍然看不到报错信息,请把你测试用的文件和bat脚本打包上传到网盘以便他人帮忙排查。
发表于 2022-10-19 10:24:22 | 显示全部楼层
本帖最后由 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
复制代码
发表于 2022-10-19 11:02:57 | 显示全部楼层

  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. )
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 14:30 , Processed in 0.011064 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表