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

[文件操作] [已解决]BAT如何批量文件更名,删除两个指定字符串之间的内容?

本帖最后由 loquat 于 2013-3-24 11:36 编辑

如题
需要更改一些文件的名字,将字符串A和字符串B之间的内容都去掉
即将 *A*B* 全部改成 *AB*
1

评分人数

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

即将 *A*.pdf 全部改成 *A.pdf

没见到字符串B

TOP

回复 2# apang
已修改,见1#
A字符串和B字符串的长度不确定
AB之间的字符串长度也不确定,可能没有

TOP

使用VBS显得比较简单
  1. a = "起始字符"
  2. b = "终止字符"
  3. str = "ABC起始字符DEF终止字符HIJ"
  4.     m = instr(1,str,a)
  5.     n = instr(1,str,b)
  6. msgbox left(str,m+len(a)-1) & mid(str,n,len(str)-n+1)
复制代码

TOP

回复 4# loquat

str = "ABC终止字符DEF起始字符HIJ"
你试试出现什么结果?
用vbs正则会保险点

TOP

本帖最后由 loquat 于 2013-3-12 00:10 编辑

回复 5# apang
正则我还没学会,呵呵
"ABC起始字符终止字符HIJ"
上面字符串是我想要的结果。如果要排除"起始字符"或者"终止字符",在截取里面修改几个参数也勉强做到吧。
大侠,您这个理解深度俺们是达不到的,起始字符我也只能默认把他当成前面使了。

TOP

防Apang大侠说的这种错
  1. a = "起始字符"
  2. b = "终止字符"
  3. str = "ABC起始字符DEF终止字符HIJ"
  4.     m = InStr(1, str, a)
  5.     n = InStr(1, str, b)
  6. If m < n Then
  7. MsgBox Left(str, m + Len(a) - 1) & Mid(str, n, Len(str) - n + 1)
  8. Else
  9. MsgBox Left(str, n + Len(b) - 1) & Mid(str, m, Len(str) - m + 1)
  10. End If
复制代码

TOP

按最短匹配,不支持含 ! 符号的文件名:
  1. @echo off&setlocal enabledelayedexpansion
  2. for %%a in (*.*) do (
  3.    set "str=%%a"
  4.    set var=!str:a=" "A:\!
  5.    for %%b in ("!var:b=.B" "!") do (
  6.       if %%~db%%~xb==A:.B set str=!str:A%%~nbB=!
  7.    )
  8.    echo ren "%%a" "!str!"
  9.    rem 测试确认无误后再把上一行的 echo 去掉
  10. )
  11. pause
复制代码
1

评分人数

TOP

回复 8# CrLf
大侠的代码果然高明,但是我在修改的时候貌似达不到效果。
比如A换成中文字"你好",B换成文件名中的内容。
*你*我*.etc,要改成*你我*.etc好像就做不到了?

TOP

返回列表