Batch file Shell.StdOut.ReadAll返回的垃圾字符

Batch file Shell.StdOut.ReadAll返回的垃圾字符,batch-file,vbscript,stdout,Batch File,Vbscript,Stdout,这是我的密码 Set objFSO = CreateObject("Scripting.FileSystemObject") a = "@echo off && " & _ "pushd ""\\xxxxx.local\cfs\Development\Docs\Baseline"" &&" & _ "cls &&" & _ "dir /b /a-d &&" & _ "popd" Set objSh

这是我的密码

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
流捕获并解释为扩展字符。摆脱它。你不需要它

为了让我感觉自己做了些什么,这里的脚本被重写为batch+JScript的混合体。如果您想搞乱它,请使用.bat扩展名保存它

@如果(@code节==@Batch)@那么
@回音
setlocal
如果“%~1”=“外壳”(
pushd“\\xxxxx.local\cfs\Development\Docs\Baseline”
目录/b/a-d
邻苯二胺
后藤:EOF
)
cscript/nologo/e:JScript“%~f0”
后藤:EOF
@结束//结束批处理/开始JScript
var oSH=WSH.CreateObject('Wscript.Shell'),
proc=oSH.Exec(“cmd/c”+WSH.ScriptFullName+“shell”);
弹出窗口(proc.StdOut.ReadAll());

作为一个额外的奖励,这里有一个可爱的“叮当”噪音添加相同的事情

@如果(@code节==@Batch)@那么
@回音
setlocal
如果“%~1”=“外壳”(
pushd“\\xxxxx.local\cfs\Development\Docs\Baseline”
目录/b/a-d
邻苯二胺
后藤:EOF
)
cscript/nologo/e:JScript“%~f0”
后藤:EOF
@结束//结束批处理/开始JScript
var oSH=WSH.CreateObject('Wscript.Shell'),
noise=WSH.CreateObject('WMPlayer.OCX.7'),
proc=oSH.Exec(“cmd/c”+WSH.ScriptFullName+“shell”);
有(噪音){
URL=oSH.Environment('Process')('SYSTEMROOT')+'\\Media\\Windows惊叹号.wav';
控件。play();
}
弹出窗口(proc.StdOut.ReadAll());

字符是ASCII控制字符换行符
0x0A
,是CLI
cls
命令的剩余部分。只需在代码中省略
“cls&&”和
行,如下所示:

a = "@echo off && " & _
  "pushd ""\\xxxxx.local\cfs\Development\Docs\Baseline"" &&" & _
  "dir /b /a-d &&" & _
  "popd"

当您从命令行对包含Test-New_1.xml的目录手动执行
dir/b/a-d
时,输出是什么样子的?你有什么奇怪的地方吗?没有。事实上,当我使用批处理文件时,输出是正确的。真不敢相信
cls
会放一些东西。你每天都在学习。谢谢。+一句话:“我觉得我做了些什么”<代码>;)我也喜欢“叮”这个词!