使用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)
但是,使用下面的代码,如果我尝试将每个单词的前导字母大写的版本替换整个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 :(得分:0)
基本事实:Windows文件系统不区分大小写(除非重新配置)(参见here)
不要假设区分大小写。例如,考虑名称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