天天笑 发表于 2018-8-31 11:34:40

[已解决]批量修改文件名

本帖最后由 天天笑 于 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去掉。

afan 发表于 2018-8-31 12:00:55

### 友情提示:本脚本由 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:07:02

本帖最后由 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 的值改成你存放文件的目录的绝对路径

志艺风云 发表于 2018-8-31 12:47:50

哈哈,两位大佬的正则有点差别啊。

改完一排序,你可能又想改回来了。

lpxx 发表于 2018-8-31 12:53:38

StringFormat

天天笑 发表于 2018-8-31 13:36:45

skyfree 发表于 2018-8-31 12:07
AutoItSetOption('MustDeclareVars', 1)

#include


可以了,跟要的结果一摸一样。谢谢哈。
正则是个好东西,可是我不会

zghwelcome 发表于 2018-8-31 14:05:31

批处理的写法

@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
)


gaoan000 发表于 2018-8-31 18:57:06

afan 发表于 2018-8-31 12:00


哈哈 大佬能用正则解决的问题坚决不用别的方法
页: [1]
查看完整版本: [已解决]批量修改文件名