Shell.StdOut.ReadAll 返回的垃圾字符
Garbage char returned by Shell.StdOut.ReadAll
这是我的代码
Set objFSO = CreateObject("Scripting.FileSystemObject")
a = "@echo off && " & _
"pushd ""\xxxxx.local\cfs\Development\Docs\Baseline"" &&" & _
"cls &&" & _
"dir /b /a-d &&" & _
"popd"
Set objShell = CreateObject("WScript.Shell").Exec("%comspec% /c " & a)
execStdOut = objShell.StdOut.ReadAll()
msgbox execStdOut
基本上我正在尝试 运行 网络驱动器上的 Dir 命令。它工作正常,但唯一的问题是输出在开头包含一个垃圾字符。不知道为什么?
输出
如果我在一个批处理文件中运行相同的步骤,输出是正确的
您的问题的答案是 cls
被 StdOut
流捕获并解释为扩展字符。摆脱它。你不需要它。
只是为了让我觉得自己有所作为,这里是重写为批处理 + JScript 混合体的脚本。如果您想弄乱它,请使用 .bat 扩展名保存它。
@if (@CodeSection == @Batch) @then
@echo off
setlocal
if "%~1"=="shell" (
pushd "\xxxxx.local\cfs\Development\Docs\Baseline"
dir /b /a-d
popd
goto :EOF
)
cscript /nologo /e:JScript "%~f0"
goto :EOF
@end // end batch / begin JScript
var oSH = WSH.CreateObject('Wscript.Shell'),
proc = oSH.Exec("cmd /c " + WSH.ScriptFullName + " shell");
oSH.popup(proc.StdOut.ReadAll());
作为额外的奖励,这里添加了可爱的 "ding" 噪音。
@if (@CodeSection == @Batch) @then
@echo off
setlocal
if "%~1"=="shell" (
pushd "\xxxxx.local\cfs\Development\Docs\Baseline"
dir /b /a-d
popd
goto :EOF
)
cscript /nologo /e:JScript "%~f0"
goto :EOF
@end // end batch / begin JScript
var oSH = WSH.CreateObject('Wscript.Shell'),
noise = WSH.CreateObject('WMPlayer.OCX.7'),
proc = oSH.Exec("cmd /c " + WSH.ScriptFullName + " shell");
with (noise) {
URL = oSH.Environment('Process')('SYSTEMROOT') + '\Media\Windows Exclamation.wav';
Controls.play();
}
oSH.popup(proc.StdOut.ReadAll());
♀
字符是ASCII控制字符换行符0x0A
,CLIcls
命令的残余。只需在代码中省略 "cls &&" & _
行,如下所示:
a = "@echo off && " & _
"pushd ""\xxxxx.local\cfs\Development\Docs\Baseline"" &&" & _
"dir /b /a-d &&" & _
"popd"
这是我的代码
Set objFSO = CreateObject("Scripting.FileSystemObject")
a = "@echo off && " & _
"pushd ""\xxxxx.local\cfs\Development\Docs\Baseline"" &&" & _
"cls &&" & _
"dir /b /a-d &&" & _
"popd"
Set objShell = CreateObject("WScript.Shell").Exec("%comspec% /c " & a)
execStdOut = objShell.StdOut.ReadAll()
msgbox execStdOut
基本上我正在尝试 运行 网络驱动器上的 Dir 命令。它工作正常,但唯一的问题是输出在开头包含一个垃圾字符。不知道为什么?
输出
如果我在一个批处理文件中运行相同的步骤,输出是正确的
您的问题的答案是 cls
被 StdOut
流捕获并解释为扩展字符。摆脱它。你不需要它。
只是为了让我觉得自己有所作为,这里是重写为批处理 + JScript 混合体的脚本。如果您想弄乱它,请使用 .bat 扩展名保存它。
@if (@CodeSection == @Batch) @then
@echo off
setlocal
if "%~1"=="shell" (
pushd "\xxxxx.local\cfs\Development\Docs\Baseline"
dir /b /a-d
popd
goto :EOF
)
cscript /nologo /e:JScript "%~f0"
goto :EOF
@end // end batch / begin JScript
var oSH = WSH.CreateObject('Wscript.Shell'),
proc = oSH.Exec("cmd /c " + WSH.ScriptFullName + " shell");
oSH.popup(proc.StdOut.ReadAll());
作为额外的奖励,这里添加了可爱的 "ding" 噪音。
@if (@CodeSection == @Batch) @then
@echo off
setlocal
if "%~1"=="shell" (
pushd "\xxxxx.local\cfs\Development\Docs\Baseline"
dir /b /a-d
popd
goto :EOF
)
cscript /nologo /e:JScript "%~f0"
goto :EOF
@end // end batch / begin JScript
var oSH = WSH.CreateObject('Wscript.Shell'),
noise = WSH.CreateObject('WMPlayer.OCX.7'),
proc = oSH.Exec("cmd /c " + WSH.ScriptFullName + " shell");
with (noise) {
URL = oSH.Environment('Process')('SYSTEMROOT') + '\Media\Windows Exclamation.wav';
Controls.play();
}
oSH.popup(proc.StdOut.ReadAll());
♀
字符是ASCII控制字符换行符0x0A
,CLIcls
命令的残余。只需在代码中省略 "cls &&" & _
行,如下所示:
a = "@echo off && " & _
"pushd ""\xxxxx.local\cfs\Development\Docs\Baseline"" &&" & _
"dir /b /a-d &&" & _
"popd"