的問題:您使用File
的.Move並在替換呼叫,但您的For Each
循環會爲您提供名爲folderIdx
的變量中的當前文件對象。
您的替換會導致只是想要的文件名,並可能將文件移動到當前文件夾(如FS所示)。 (我沒有測試這種猜測)
要重命名/重新編號,根據增加的索引文件夾中的所有文件,我會用:
Dim oFS : Set oFS = CreateObject("Scripting.FileSystemObject")
Dim sDir : sDir = "..\testdata\17165630"
Dim nIdx : nIdx = 1
Dim oFile
For Each oFile In oFS.GetFolder(sDir).Files
WScript.Echo "bad idea:", Replace(oFile.Path, oFile, nIdx)
WScript.StdOut.Write oFile.Name
If oFS.FileExists(oFS.BuildPath(sDir, nIdx)) Then
WScript.StdOut.WriteLine " already exists"
Else
oFile.Name = nIdx
WScript.StdOut.WriteLine " => " & oFile.Name
End If
nIdx = nIdx + 1 ' Thanks, @Ansgar!
Next
輸出:
bad idea: 1
5 => 1
bad idea: 2
6 => 2
bad idea: 3
8 => 3
bad idea: 4
7 => 4
應讓你在重新編號之前和之後的順序保持謹慎。
更新:
要前置零,使用somethink像:
>> For Each nIdx In Array(1, 5, 10, 99, 100, 999)
>> WScript.Echo Right(1000 + nIdx, 3)
>> Next
>>
001
005
010
099
100
999
要保持一個特定的順序,你必須處理的順序的文件。我會開始炮轟dir /o:<your choice>
。
更新II:
一個.FileExists檢查不能避免重編已經重新編號的文件。您必須查看當前文件的oFile.Name並跳過它(如果已經處理過)。如果你在開始有非數字的文件名,你可以使用IsNumeric()
:
Dim oFS : Set oFS = CreateObject("Scripting.FileSystemObject")
Dim sDir : sDir = "..\testdata\17165630"
Dim nIdx : nIdx = 1
Dim oFile
WScript.Echo "----- Given:"
For Each oFile In oFS.GetFolder(sDir).Files
WScript.Echo oFile.Path
Next
WScript.Echo "----- Rename:"
For Each oFile In oFS.GetFolder(sDir).Files
WScript.StdOut.Write oFile.Name
If IsNumeric(Left(oFile.Name, 3)) Then
WScript.Stdout.WriteLine " is already numbered"
Else
Dim sNewName : sNewName = Right(1000 + nIdx, 3) & "." & oFile.Name
If oFS.FileExists(oFS.BuildPath(sDir, sNewName)) Then
WScript.StdOut.WriteLine " already exists"
Else
oFile.Name = sNewName
WScript.StdOut.WriteLine " => " & oFile.Name
End If
nIdx = nIdx + 1
End If
Next
WScript.Echo "----- Result:"
For Each oFile In oFS.GetFolder(sDir).Files
WScript.Echo oFile.Path
Next
兩個運行的輸出:
----- Given:
M:\lib\kurs0705\testdata\17165630\c.png
M:\lib\kurs0705\testdata\17165630\a.png
M:\lib\kurs0705\testdata\17165630\b.png
M:\lib\kurs0705\testdata\17165630\d.png
----- Rename:
c.png => 001.c.png
a.png => 002.a.png
b.png => 003.b.png
d.png => 004.d.png
----- Result:
M:\lib\kurs0705\testdata\17165630\002.a.png
M:\lib\kurs0705\testdata\17165630\003.b.png
M:\lib\kurs0705\testdata\17165630\004.d.png
M:\lib\kurs0705\testdata\17165630\001.c.png
----- Given:
M:\lib\kurs0705\testdata\17165630\002.a.png
M:\lib\kurs0705\testdata\17165630\003.b.png
M:\lib\kurs0705\testdata\17165630\004.d.png
M:\lib\kurs0705\testdata\17165630\001.c.png
----- Rename:
002.a.png is already numbered
003.b.png is already numbered
004.d.png is already numbered
001.c.png is already numbered
----- Result:
M:\lib\kurs0705\testdata\17165630\002.a.png
M:\lib\kurs0705\testdata\17165630\003.b.png
M:\lib\kurs0705\testdata\17165630\004.d.png
M:\lib\kurs0705\testdata\17165630\001.c.png
'nIdx'應該有條件的,否則增量外遞增將停止一次遇到名稱衝突。 –
感謝您的回覆。它的拋出錯誤在「oFile.Name = nIdx」..錯誤是「句柄無效」 – user2432627
@ user2432627 - 那麼你不使用(相當於)我發佈的代碼;仔細檢查和/或發佈您的代碼。 –