[已解决]批量修改文件名
本帖最后由 天天笑 于 2018-8-31 13:37 编辑原文件如下图: 批量修改后的文件:
Type 000.xls Type 0.xls
Type 001.xls Type 1.xls
Type 002.xls Type 2.xls
Type 003.xls Type 3.xls
Type 004.xls Type 4.xls
Type 007.xls Type 7.xls
Type 009.xls Type 9.xls
Type 010.xls Type 10.xls
..... ......
有什么办法可以实现吗?
就是按照正常的数字显示,把前面的0去掉。 ### 友情提示:本脚本由 Au3.REHelper 于 2018/08/31 12:00 自动生成,不保证其正确性,请自行测试 ###
Local $sSource = _
'Type 000.xls' & @CRLF & _
'Type 001.xls' & @CRLF & _
'Type 007.txt' & @CRLF & _
'Type 0090.xls' & @CRLF & _
'Type 010.XLS' & @CRLF & _
'Type00100.xls'
;~MsgBox(0, '源字符串', $sSource)
Local $sSRERe = StringRegExpReplace($sSource, '(?mi)(?<=\D)0+(?=\d+\.xls$)', '')
MsgBox(0, '替换结果', $sSRERe)
本帖最后由 skyfree 于 2018-8-31 12:08 编辑
AutoItSetOption('MustDeclareVars', 1)
#include <Array.au3>
#include <File.au3>
_Main()
Exit
Func _Main()
Local $sInputDir = @ScriptDir & '\Files'
Local $aFileList = _FileListToArray($sInputDir, '*.xls', 1)
;;_ArrayDisplay($aFileList, '$aFileList')
Local $i, $sNewFileName, $aTemp
For $i = 1 To UBound($aFileList, 1) - 1
$aTemp = StringRegExp($aFileList[$i], '(?i)^Type (\d{1,3})\.xls$', 2)
If Not (@error) Then
$sNewFileName = 'Type ' & String(Int($aTemp)) & '.xls'
FileMove($sInputDir & '\' & $aFileList[$i], $sInputDir & '\' & $sNewFileName, 1)
EndIf
Next
MsgBox(64, '', 'OK!')
EndFunc ;==>_Main
$sInputDir 的值改成你存放文件的目录的绝对路径
哈哈,两位大佬的正则有点差别啊。
改完一排序,你可能又想改回来了。 StringFormat skyfree 发表于 2018-8-31 12:07
AutoItSetOption('MustDeclareVars', 1)
#include
可以了,跟要的结果一摸一样。谢谢哈。
正则是个好东西,可是我不会 批处理的写法
@echo off
for /f "tokens=1,2 delims= " %%a in ('dir /b/a-d *.xls') do (
set /a num=%%~nb
call,ren "%%a %%b" "%%a %%num%%%%~xb
)
afan 发表于 2018-8-31 12:00
哈哈 大佬能用正则解决的问题坚决不用别的方法
页:
[1]