2012-12-10 16 views
1

当我使用批处理文件创建文件invisible.vbs,然后删除时,它会停止并出现错误。基本上,我想要做的是让批处理文件创建此文件。动态创建invisible.vbs时出错?

这是我的错误,当我运行该批处理文件:

C:\Users\HP\Desktop>"New Text Document.bat" 
CreateObject("Wscript.Shell").Run """" 
'WScript.Arguments' is not recognized as an internal or external command, operable program or batch file. 
'""""' is not recognized as an internal or external command, operable program or batch file. 

这是何等的批处理文件:

@ECHO OFF 
CD /D %~dp0 
ECHO\ CreateObject("Wscript.Shell").Run """" & WScript.Arguments(0) & """", 0,False>>Invisible.vbs 
::What I want to do with the file is here 
DEL %CD%\invisible.vbs /Q /S 

我会注意到生成的文件,但它是空的,因此当我尝试使用它来使另一个批处理文件不可见时什么也不做。

回答

3

这是由echo语句中的&符号引起的。当使用字符串^&时,它需要被批转义字符^转义。您可能还想使用单输出重定向运算符>(覆盖现有),而不是双重>>(追加到现有)。

@ECHO OFF 
CD /D %~dp0 
ECHO.CreateObject^("Wscript.Shell"^).Run """" ^& WScript.Arguments^(0^) ^& """", 0,False>Invisible.vbs 
::What I want to do with the file is here 
DEL %CD%\invisible.vbs /Q /S 

另一个技巧是在创建丢弃文件时使用%TEMP%目录变量。

+0

好的,这是有效的,但现在它说:'.Run在这个时候是意外的'。现在怎么办? –

+1

@JeffreyLin当你看到一个消息,说'blah'在这个时候是意外的,只要看看'blah'之前的那个角色,你就会找到原因。在批处理中,括号'()'是特殊字符,当它们被直接使用而不包含在引用内时,它们本身应该被转义'^(^)'。对不起,我错过了。更新了答案。谢天谢地,这种类型的错误在将echo输出重定向到文件时不会导致执行问题。它只是烦人。 –

+0

@JeffreyLin在批处理中,括号'()'是(指定范围)的特殊字符请注意,有许多**烦人**批处理和字面上使用特殊字符。批处理特殊字符包括'%&()^〜<>'并注意一些特殊字符在跟随另一个特殊字符时做了不同的事情。 –