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

[文件操作] 求批量去除文件名后面一段相等长度但内容不一样的批处理

例如将
苹果雪梨-2020-05-07 .xls
相机哈密瓜-2020-07-01 .xls
芒果-2020-05-27 .xls
变成
苹果雪梨.xls
相机哈密瓜.xls
芒果.xls
算上最后的空格应该是去掉了文件名后的12个字符
求批处理尽量不要软件

  1. CD /D "%~dp0"
  2. @echo off
  3. for /f "tokens=1,* delims=-" %%i in ('dir /b/a-d/oN *.xls') do (
  4.     ren "%%~i-%%~j" "%%i.xls"
  5. )
  6. pause
复制代码
1

评分人数

TOP

  1. @echo off
  2. @for /f "delims=" %%i in ('dir /b *.xls *.xlsx') do (
  3. @ren2 -f "([^-]*)-.*%%~xi" "$1%%~xi"
  4. )
  5. pause
复制代码
ren2要好一些,方便操作不规则文件名按照规则重命名
http://bcn.bathome.net/tool/ren2.exe

TOP

回复 3# xp3000
好用,十分给力

TOP

本帖最后由 netdzb 于 2020-5-11 12:50 编辑

回复 1# a3228269

我还有一个办法

ren *.xls *
ren -* *
ren -* *
ren -* *
ren * *.xls

我不知道理解的对吗?这个思路是否可以?
层层递归把多余的内容去掉。

TOP

回复 3# xp3000

看一下,我的思路能否实现?我是手机无法测试。

TOP

不能,
*.xls和*,*会当成文件名和原来类型
-*和*或许也会被视为同一个

ren2 -f "([^-]*)-.*\.(xls|xlsx)" "$1.$2"

ren2.exe这个好用也容易理解,本站网友推荐用的,我也推荐下;
上面忘记说下载后放入C:\Windows\System32了

第一个()是非-的任意字节0个或多个;
-.*\.中的-是-字符,然后.*是任意字符0个或多个,最后\.就是.字符;
第二个()是xls和xlsx
替换部分的$1.$2就是前面第一个()加.和第二个()的内容。

最重要的发现居然支持零宽断言
(?=(要有|A))
(?!(不能有|A))

TOP

回复 7# xp3000


工具在哪里下载,好像失效了啊。

TOP

TOP

本帖最后由 gao_leyun_km 于 2020-5-12 21:24 编辑

方法一:多选目标文件,批量拖入批处理文件实现改名
  1. @echo off
  2. :Loop
  3. if not exist "%~1" exit
  4. set N=%~n1
  5. set N=%N:~0,-12%
  6. ren "%~1" "%N%%~x1"
  7. shift
  8. goto Loop
复制代码
方法二:按文件名特征特征查找目标文件,双击运行实现同一目录下批量改名(其中-2可以替换成各个文件名中共有的字符串,目录下具有该字符串的文件都会被改名)
  1. @echo off&cd /d "%~dp0"
  2. for /f "delims=" %%i in ('dir /b^|find "-2"') do call :Loop "%%~fi"
  3. exit
  4. :Loop
  5. set N=%~n1
  6. set N=%N:~0,-12%
  7. ren "%~1" "%N%%~x1"
  8. goto :eof
复制代码

TOP

练练手:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for %%a in (*.xls) do (
  4.     set "str=%%a"
  5.     set str=!str:~0,-16!
  6.     ren "%%a" "!str!%%~xa"
  7. )
  8. pause
复制代码

TOP

返回列表