批量文件名修改求优化【已解决】,谢谢A大
本帖最后由 骗子 于 2013-4-10 19:27 编辑程序目录下只有一种文件,要么是目录,要么是文件
名称是一组规律的内容,内容不一定是什么,可能是
888(1),888(2)。。。
或者是
xxxx1,xxxx2,xxxx3....
或者是1,2,3...
但是不管是那种,都会是连续的
现在想将这些东西重命名成 一个指定前缀的名称
我自己的代码虽然能实现文件的重命名,但是有个问题就是如果目录下有1~10这样的文件的话
结果会是这样子的:
1 --- I1
10 --- I2
2 --- I3
3 --- I4
我的想法是 1----I1
2----I2
3----I3
#include <File.au3>
#include <array.au3>
#NoTrayIcon
#PRE_UseUpx=N ;使用压缩
$qianzhui = InputBox('请输入前缀', '只需要改名的前缀即可', 'I')
If @error Then Exit
$filelist = _FileListToArray(@ScriptDir)
_ArrayDisplay ($filelist)
$J = 1
If Not @error Then
For $i = 1 To $filelist
If $filelist[$i] <> @ScriptName Then
$word = StringSplit($filelist[$i], '.')
If $word > 1 Then
If Not FileExists(@ScriptDir & '\' & $qianzhui & $J & '.' & $word) Then FileMove(@ScriptDir & '\' & $filelist[$i], @ScriptDir & '\' & $qianzhui & $J & '.' & $word, 1)
Else
If Not FileExists(@ScriptDir & '\' & $qianzhui & $J) Then DirMove(@ScriptDir & '\' & $filelist[$i], @ScriptDir & '\' & $qianzhui & $J, 1)
EndIf
$J += 1
EndIf
Next
EndIf
7楼A大的代码
#include <File.au3>
$sQianzhui = InputBox('请输入前缀', '只需要改名的前缀即可', 'I')
If @error Then Exit
_ReNameFromOrder('C:\test', $sQianzhui)
Func _ReNameFromOrder($sDir, $sQianzhui)
Local $afiles = _FileListToArray($sDir), $sNwNe
If @Error Then Return
For $i = 1 To $afiles
$sNwNe = $sQianzhui & StringRegExpReplace($afiles[$i], '.*?(\d+)\D*?(\..+)?$', '\1\2')
If @Extended < 1 Then ContinueLoop
If Not FileExists($sDir & '\' & $afiles[$i] & '\') Then
FileMove($sDir & '\' & $afiles[$i], $sDir & '\' & $sNwNe, 1)
Else
DirMove($sDir & '\' & $afiles[$i], $sDir & '\' & $sNwNe, 1)
EndIf
Next
EndFunc ;==>_ReNameFromOrder 如果只是加前缀,根本不需要理会后面的数字吧^ 回复 2# afan
主要是目录下的文件名不固定,有可能是直接的文件序号,也有可能是有其他的前缀后缀的
最后的文件名只要 指定的前缀加序号 回复afan
主要是目录下的文件名不固定,有可能是直接的文件序号,也有可能是有其他的前缀后缀的
...
骗子 发表于 2013-4-10 11:35 http://www.autoitx.com/images/common/back.gif
那也可以直接提取文件名的数字,然后在数字前加个前缀就完事了吧 回复 4# afan
现在的问题就是我不会获取序号啊,因为前后缀中也可能会有数字,用\d+获取的不准吧? 回复afan
现在的问题就是我不会获取序号啊,因为前后缀中也可能会有数字,用\d+获取的不准吧?
骗子 发表于 2013-4-10 12:17 http://www.autoitx.com/images/common/back.gif
以最接近后缀名的数字为准,如果没个排序标准怎么命名呢?如果是随意加序号那也就没一楼的问题了,10 --- I2 也就无所谓了。 个人思路,仅供参考#include <File.au3>
$sQianzhui = InputBox('请输入前缀', '只需要改名的前缀即可', 'I')
If @error Then Exit
_ReNameFromOrder('C:\test', $sQianzhui)
Func _ReNameFromOrder($sDir, $sQianzhui)
Local $afiles = _FileListToArray($sDir), $sNwNe
If @Error Then Return
For $i = 1 To $afiles
$sNwNe = $sQianzhui & StringRegExpReplace($afiles[$i], '.*?(\d+)\D*?(\..+)?$', '\1\2')
If @Extended < 1 Then ContinueLoop
If Not FileExists($sDir & '\' & $afiles[$i] & '\') Then
FileMove($sDir & '\' & $afiles[$i], $sDir & '\' & $sNwNe, 1)
Else
DirMove($sDir & '\' & $afiles[$i], $sDir & '\' & $sNwNe, 1)
EndIf
Next
EndFunc ;==>_ReNameFromOrder 收藏了。。谢谢
页:
[1]