0

我的帖子

个人中心

设置

  发新话题
一堆文件名如下:
1_aaa_jjlsfs.exe
2_aaa_12312.exe
3_aaa_j323fs.exe
.
.
.
........
都包含 _aaa_

怎么批量改名成
1.exe
2.exe
3.exe



import os,re
path="D:\Desktop\testexe\\"   #path 文件所在目录
list = os.listdir(path)
for i in list:
  newname = re.sub('_aaa_\w+.','.',i)
  src = path+i
  dct = path+ newname
  os.rename(src,dct)

#安装个python 执行cmd python



dir 获取文件列表到excel   ,之后处理好对照   在编写rname  就好了。  不需要循环.(文件多了  一定很多特殊情况)




引用:
原帖由 HughGQ 于 2019-8-9 08:55 发表
import os,re
path="D:\Desktop\testexe\\"   #path 文件所在目录
list = os.listdir(path)
for i in list:
  newname = re.sub('_aaa_\w+.','.',i)
  src = path+i
  dct = path+ newname
  os.rename(src,dct)

# ...
是个高级的方式!! 但是我还是希望不依赖系统以外程序,最好一个批处理能做到。 感谢你的回答



引用:
原帖由 nn1183 于 2019-8-9 09:43 发表
dir 获取文件列表到excel   ,之后处理好对照   在编写rname  就好了。  不需要循环.(文件多了  一定很多特殊情况)

谢谢回答。目前用的就是这种方式,嫌麻烦。 最好有办法一个批处理搞定。



python 还是强大,简短的几行语句,就能实现楼主的需求



有没有这种操作呢 求教



你这个。。。。
前面有编号,只要去掉后边的。。。

在当前文件夹里建一个bat

ren    1*.exe    1.exe
ren    2*.exe    2.exe
……

用excel拉一下表格,复制到bat文件里运行就好了



引用:
原帖由 qq5b967af48ce3c 于 2019-8-12 10:53 发表
你这个。。。。
前面有编号,只要去掉后边的。。。

在当前文件夹里建一个bat

ren    1*.exe    1.exe
ren    2*.exe    2.exe
……

用excel拉一下表格,复制到bat文件里运行就好了 ...
是个思路。但是 真实环境的文件名不是1 2 3 ,前面都是没规律的。  不想借助excel ,目前就是借助excel,麻烦。最好有能批处理的办法





@echo off
setlocal EnableDelayedExpansion
set a=1
rem 循环当前目录下所有文件名,支持带空格
for /f "delims=" %%i in ('dir /b *.txt') do (
rem 如果没有相同的文件名,则继续
if not "%%~ni"=="%~n0" (
ren "%%i" "!a!.txt"
rem 设置数值型变量a=a+1
set /a a+=1
)
)
exit


把上边的txt改成exe就行了



@echo off

::找出当前目录下所有的文件
FOR /F %%i In ('dir /B') Do (
    ::判断当前文件名是否包含‘_aaa_’,如果包含取值'_aaa_'前面的数字重命名文件,并删除原文件,注意备份
    echo %%i | findstr "_aaa_" > nul && FOR /F "tokens=1 delims=_" %%a in ("%%i") do (
         echo f|xcopy /q /y %~dp0%%i %~dp0%%a.exe
         del %~dp0%%i
    )
)

pause

萌新尝试写了一下,看看行吗



引用:
原帖由 qq5b967af48ce3c 于 2019-8-12 15:04 发表


@echo off
setlocal EnableDelayedExpansion
set a=1
rem 循环当前目录下所有文件名,支持带空格
for /f "delims=" %%i in ('dir /b *.txt') do (
rem 如果没有相同的文件名,则继续
if not "%%~ni"=="%~n0"  ...
强! 很强! 但是不是这个意思。

13a2_aaa_jjlsfs.exe
22g34_aaa_12312.exe
32342_aaa_j323fs.exe
.
.
.
........
都包含 _aaa_

要批量改成:
13a2.exe
22g34.exe
32342.exe
肯定要有一个判断_aaa_的地方。



引用:
原帖由 wx5d51110814d8a 于 2019-8-12 15:15 发表
@echo off

::找出当前目录下所有的文件
FOR /F %%i In ('dir /B') Do (
    ::判断当前文件名是否包含‘_aaa_’,如果包含取值'_aaa_'前面的数字重命名文件,并删除原文件,注意备份
    echo %%i | findstr "_aaa_" > nu ...
强强强啊。 新新人类 今天都怎么了 都这么列害了吗 自愧不如。  但是兄弟,有点bug

我那个文件名是类似这样的,有多个_ ,是不是有多个_就会有bug了。 每个都包含_backup_。 想把包括_backup_在内的后面的全去了,扩展名不变。还想问,这是删除以后再重建的文件吗。 我那些文件很大啊,有的多10几个G,有没有直接改名的办法
123_123_s_backup_2019_08_07_010001_6462844.exe
132_234_3_backup_2019_08_07_010441_6462324.exe

另外还想请教 萌新 是什么意思




本帖最后由 jaycome 于 2019-8-12 15:55 编辑
引用:
原帖由 jaycome 于 2019-8-12 15:48 发表

强强强啊。 新新人类 今天都怎么了 都这么列害了吗 自愧不如。  但是兄弟,有点bug

我那个文件名是类似这样的,有多个_ ,是不是有多个_就会有bug了。 每个都包含_backup_。 想把包括_backup_在内的后面的全去了,扩展名 ...
谢谢夸奖,我也只是临时一边查资料一边写的,我姑且认为你的原文件名称是有相同规律的,这里是直接改名的。

改名逻辑是:根据_将文件名分割,tokens后面的数字表示的就是获取的分割的内容,然后拼接起来,例如,123_123_s_backup_2019_08_07_010001_6462844.txt分割成123,123,s,backup,...然后取第一个、第二个和第三个拼接成123_123_s.exe

修改后:

@echo off

::找出当前目录下所有的文件
for /f %%i in ('dir /B') do (
    ::判断当前文件名是否包含‘_backup_’,如果包含取值'_backup_'前面的内容重命名文件,注意备份
    echo %%i | findstr "_backup_" > nul && FOR /F "tokens=1,2,3 delims=_" %%a in ("%%i") do (
        ren %%i %%a_%%b_%%c.exe
    )
)

pause



萌新就是新手的意思=w=
但愿能帮到你



引用:
原帖由 wx5d51110814d8a 于 2019-8-12 16:16 发表

谢谢夸奖,我也只是临时一边查资料一边写的,我姑且认为你的原文件名称是有相同规律的,这里是直接改名的。

改名逻辑是:根据_将文件名分割,tokens后面的数字表示的就是获取的分割的内容,然后拼接起来,例如,123_123_s_backup_2 ...
谢谢。 越来越接近了,但是那个用_分段不可靠。 因为有的文件名是有多段类似1_2_3_4_5_backup_12313.exe,也有一些文件名是少段如1_backup_11.exe
能不能用_backup_分段,然后取第一段就对了.。 我怎么发现用_backup_分段和用_分段效果一样呢?




本帖最后由 jaycome 于 2019-8-12 16:54 编辑
引用:
原帖由 wx5d51110814d8a 于 2019-8-12 16:16 发表

谢谢夸奖,我也只是临时一边查资料一边写的,我姑且认为你的原文件名称是有相同规律的,这里是直接改名的。

改名逻辑是:根据_将文件名分割,tokens后面的数字表示的就是获取的分割的内容,然后拼接起来,例如,123_123_s_backup_2 ...
这个方法很新颖。但是如果delims只能用一个字符做为分割符,那就要前功尽弃了。估计要换思路



顶一下帖子



好吧 我理解不行,两次都理解错了

忘记看你后边的回复了。。。这样看来也不对 我有空在想想




本帖最后由 qq5b967af48ce3c 于 2019-8-13 10:44 编辑
@echo off&color 3a
echo.

echo 此批处理可批量替换本文件所在文件夹下所有文件的文件名。

echo.
echo.&set /p strtemp1= 请输入要替换的文件(文件夹)名字符串(可替换空格):

echo.&set /p strtemp2= 请输入替换后的文件(文件夹)名字符串(删除则直接回车):

for /f "delims=" %%i in ('dir /s /b') do (
setlocal enabledelayedexpansion
set "f=%%~nxi"
set "f1=!f:%strtemp1%=%strtemp2%!"
if not "%%i"==%0 (
if not "!f!"=="!f1!" (
if exist "!f1!" (
echo 由于!f1!存在同名,!f! 文件名未改 ) else ren "!f!" "!f1!"
)
endlocal
)
)
pause

以上我借用了网络资源;把_aaa_重命名为}(这个是英文}和下边对其,可输入随便改,}也是随便改)

for /f "tokens=1 delims=}" %%a in ('dir /b *.txt') do (

ren "%%a}*.txt" "%%a.txt")

pause


改了之后,如果}之前有重名文件需要自己检查,或重命名后手动改一下把,再编号头疼
同样把上边的txt改成exe就行了



CTRL+A全选,然后按F2,输入文件名,最后按CTRL+回车



‹‹ 上一贴:求助:关于通过fortigate的***连接google网站的问题 ...   |   下一贴:windows2016标准版卡在欢迎界面很久 ››
  发新话题
快速回复主题
关于我们 | 诚聘英才 | 联系我们 | 网站大事 | 友情链接 |意见反馈 | 网站地图
Copyright©2005-2019 51CTO.COM
本论坛言论纯属发布者个人意见,不代表51CTO网站立场!如有疑义,请与管理员联系:bbs@51cto.com