1

我试图在 MS 窗口 xp 中从 cmd 脚本转到 vbscript

cmd代码是的

set home_=%~dp0

set part001=part001
set part002=part002
set part003=part003
set part004=part004

::get the dir in part001
for /f "delims=" %%A in ('dir /s/b/o:n/a:d ^"%home%%part001%\^"') do (
echo show have dir path
echo %%A
pause
)
echo to the end
pause
goto :eof

到 vbscript

我不知道要转换的部分是那些被格式化为cmd{cmd 编码}

dim strHome as strimg =cmd{[%~dp0]}

dim strPart001 as sting = part001
dim strPart002 as sting = part002
dim strPart003 as sting = part003
dim strPart004 as sting = part004

'get the dir in part001
Dim objFSo, objFile
Set objFSo = CreateObject("Scripting.FileSystemObject")

set objDirPart001list = objFS.getfolder(strHome&strPart001\)
set subDirPart001list = objDirPart001list.SubFolders
for each  subDirPart001Name in subDirPart001list
    WScript.Echo show dir path
    WScript.Echo part
    cmd{pause}
    )
cmd{pause}

对应的 vbscript 命令是什么:

  • %~dp0
  • 暂停
4

1 回答 1

0

%~dp0是一个所谓的魔术命令,但从技术上讲,这种方法称为变量替换。% n变量用于引用脚本的命令行参数。最常见的是,%0将返回正在执行的脚本的完整路径。d 和 p 是特殊修饰符,它们将分别返回该路径的驱动器和路径部分。还有 n 返回文件名部分以及其他。可以根据需要组合这些修饰符。因此,该%~dp0命令将返回执行脚本所在目录的完整驱动器和路径。要在 VBScript 中执行此操作,您可以使用以下任何依赖于 WScript 对象的 ScriptFullName 方法的方法:

Set objShell = CreateObject("WScript.Shell")
Set objFso = CreateObject("Scripting.FileSystemObject")
strPath = objFso.GetParentFolderName(WScript.ScriptFullName)

或者

strPath = Left(WScript.ScriptFullName, Len(WScript.ScriptFullName) - Len(WScript.ScriptName))

或者我最喜欢的:

Replace(WScript.ScriptFullName, WScript.ScriptName, "")

pause命令用于停止命令解释器并提示用户按任意键继续。这通常是为了让用户有时间在命令窗口关闭之前阅读命令窗口中的信息。这是在 CScript 中执行此操作的子例程。(对于 WScript,您只需使用一个简单的 MessageBox。)

Sub Pause
    WScript.StdOut.Write "Press any key to continue . . . "
    WScript.StdIn.Read(1)
End Sub
于 2012-08-12T17:10:29.850 回答