2016-09-16 7 views
1

Replace関数を使用して、文字や文字列をファイル名に追加するときに問題はありません。VBScript - replace関数とgetbasenameメソッドを使用してファイル名を変更する

j = prependstring 
for each i in folder.files  
k = len(i.name) 
i.name = replace(i.name, i.name, j & left(i.name, k)) 

j = appendstring 
for each i in folder.files 
ext = fso.getextensionname(i) 
k = instrrev(i.name,".")-1 
i.name = replace(i.name, i.name, left(i.name, k) & " " & j & "." & ext) 

しかし、私は各単語の主要な文字は、私はエラーを「ファイルが既に存在する」取得資産計上されているバージョンで、全体base nameを交換しようとした場合、次のコードを使用して。

option explicit 
dim fso, folder, wshell, strpath, strname, i, abspath, base, ext, capstr 

set fso = createobject("scripting.filesystemobject") 
set folder = fso.getfolder(".") 

set wshell = createobject("wscript.shell") 
strpath = wscript.scriptfullname 
strname = fso.getfilename(strpath) 

function wordcaps(strinput) 
dim x 
for x = asc("a") to asc("z") 
strinput = replace(strinput, " " & chr(x), " " & ucase(chr(x))) 
next 
wordcaps = ucase(left(strinput, 1)) & mid(strinput, 2) 
end function 

for each i in folder.files 
if i.name <> strname then 
base=fso.getbasename(i) 
capstr = wordcaps(base) 
'wscript.echo capstr 
i.name = replace(i.name, base, capstr) 
end if 
next 
wscript.echo "Done!" 

下図のように私はMoveFileメソッドを使用して同じ目的を達成することができます

for each i in folder.files 
if i.name <> strname then 
abspath=fso.getabsolutepathname(i) 
base=fso.getbasename(i) 
ext=fso.getextensionname(i) 
capstr = wordcaps(base) 
fso.movefile abspath, folder & "\" & capstr & "." & ext 
end if 
next 
wscript.echo "Done!" 

replaceバージョンが動作しないんなぜ私が理解できないのですか?

答えて

0

基本的な事実:(再構成しない限り)Windowsのファイルシステムは大文字と小文字が区別されます(参照here

は、大文字と小文字の区別を前提としないでください。たとえば、OSCAR、 Oscar、およびoscarの名前は、ファイルシステム(POSIX準拠のファイルシステムの場合は など)によって異なるとみなされても、同じであるとみなしてください。ノート NTFSが大文字と小文字の区別についてPOSIXセマンティクスをサポートしていますが、これはデフォルトの動作ではなく です。詳細については、CreateFileを参照してください。

.MoveFileは(コピーを必要とする可能性が).nameのは、(名称変更と何もない)の名前を変更後、緩くあることを認識することが、この事実と真剣に取り組むために必要なコード:

Option Explicit 

Const csFiNa = "a.txt" 

Dim goFS : Set goFS = CreateObject("Scripting.FileSystemObject") 
If goFS.FileExists(csFiNa) Then goFS.DeleteFile csFiNa 
goFS.CreateTextFile csFiNa 
WScript.Echo "Size of", csFiNa, ":", goFS.GetFile(csFiNa).Size 
goFS.MoveFile csFiNa, UCase(csFiNa) 
WScript.Echo "Moved", csFiNa, "to", UCase(csFiNa) 
On Error Resume Next 
goFS.GetFile(csFiNa).Name = UCase(csFiNa) 
WScript.Echo "*** Error:", Err.Description 
On Error GoTo 0 

出力:

cscript 39537824.vbs 
Size of a.txt : 0 
Moved a.txt to A.TXT 
*** Error: File already exists 
+0

これがクリアされました。ありがとうございます。Ekkehard :) –

関連する問題