String VBScript-使用替换函数和getbasename方法重命名文件

String VBScript-使用替换函数和getbasename方法重命名文件,string,replace,vbscript,character,String,Replace,Vbscript,Character,使用Replace函数在文件名前添加字符或字符串时没有任何问题,例如 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

使用
Replace
函数在文件名前添加字符或字符串时没有任何问题,例如

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)
但是,使用以下代码,如果我尝试将整个
基本名称
,替换为每个单词的前导字母大写的版本,则会出现“文件已存在”错误


我不明白为什么替换版不起作用?

基本事实:Windows文件系统不区分大小写(除非重新配置)(参见)

不要假定区分大小写。例如,考虑奥斯卡的名字, Oscar和Oscar是一样的,即使有些文件系统(如 作为一个兼容POSIX的文件系统,可以认为它们是不同的。注 NTFS支持区分大小写的POSIX语义,但这是 不是默认的行为。有关详细信息,请参见CreateFile

代码需要处理这一事实才能意识到.MoveFile(可能涉及复制)比.Name重命名(名称更改,其他什么都不做):

输出:

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

基本事实:Windows文件系统不区分大小写(除非重新配置)(参见)

不要假定区分大小写。例如,考虑奥斯卡的名字, Oscar和Oscar是一样的,即使有些文件系统(如 作为一个兼容POSIX的文件系统,可以认为它们是不同的。注 NTFS支持区分大小写的POSIX语义,但这是 不是默认的行为。有关详细信息,请参见CreateFile

代码需要处理这一事实才能意识到.MoveFile(可能涉及复制)比.Name重命名(名称更改,其他什么都不做):

输出:

cscript 39537824.vbs
Size of a.txt : 0
Moved a.txt to A.TXT
*** Error: File already exists
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