【发布时间】:2020-06-05 20:56:30
【问题描述】:
我有一个 bat 文件,它调用转换文件编码的 vbscript。 在通过设置文件的一部分运行代码时,它可以正常工作,但是当我尝试将多个文件作为参数传递时,我收到以下错误: microsoft vbscript 运行时错误:无效或不合格的引用
你可以在 run.cmd 下面看到我的批处理脚本:
@Echo off
SET CHEMINDAT = C:\Users\myuser\Desktop\TRY\DATA_TY\
SET CHEMINTMP = C:\Users\myuser\Desktop\TRY\TMP\
echo %DATE% %TIME% Debut de traitement.
dir %CHEMINDAT%* /a:-d/b > %CHEMINTMP%-liste.txt 2
FOR /F "eol=; tokens=1 delims=, " %%i in (%CHEMINTMP%-liste.txt) do (
echo %%i > %CHEMINTMP%Fichier_en_cours.txt
echo %DATE% %TIME% Traitement du fichier : %%i
cscript //NoLogo C:\Users\myuser\Desktop\TRY\\Scripts\unix2dos_7.vbs %%i
)
pause
exit /b 1
您将在下面找到我的 VBScript 'unix2dos_7.vbs':
Const adTypeBinary = 1
Const adTypeText = 2
Const adSaveCreateNotExist = 1
Const adSaveCreateOverWrite = 2
Const adWriteLine = 1
Const adReadLine = -2
Const adLF = 10
Const adCR = 13
Const adCRLF = -1
Set streamUTF8 = CreateObject("ADODB.Stream")
Set streamASCII = CreateObject("ADODB.Stream")
Dim args
set args = Wscript.arguments
strOutOne= args(0)
streamUTF8.Open
streamUTF8.Type = adTypeText
streamUTF8.LineSeparator = adCRLF
streamUTF8.Charset = "UTF-8"
streamUTF8.LoadFromFile strOutOne
streamASCII.Open
streamASCII.Type = adTypeText
streamASCII.LineSeparator = adCRLF
streamASCII.CharSet = "us-ascii"
Do Until streamUTF8.EOS
streamASCII.WriteText streamUTF8.ReadText(adReadLine), adWriteLine
Loop
streamASCII.SaveToFile "myfileConverted.txt", adSaveCreateOverWrite
我还想用新文件替换原始文件,而不是创建一个新文件“myfileConverted.txt”。这样我就没有两次相同的文档了
有人可以帮忙吗?
提前致谢
【问题讨论】:
-
我要问的第一个问题是,为什么?我还建议你看看这个previous question,它是cmets,它是答案,它利用powershell,而不是vbscript。
-
如果您正在处理长文件名,那么您可能需要在调用 .vbs 时在 .cmd 文件中用双引号 (") 引用 (")
%%i;否则,您的 .vbs 只会得到路径的第一部分。另外,在 TRY 之后去掉你的双反斜杠 (\)。或者,你可能需要调用 32 位版本的 cscript.exe。最后,一定要.Close你的 ADODB。 .vbs 脚本中的流对象。C:\Windows\SysWOW64\cscript.exe //NoLogo C:\Users\myuser\Desktop\TRY\Scripts\unix2dos_7.vbs "%%i"
标签: batch-file vbscript parameters