代码之家  ›  专栏  ›  技术社区  ›  Thomas Owens

有没有办法让Windows Shell脚本执行与其位置相关的所有操作,而不是从中调用它的位置?

  •  2
  • Thomas Owens  · 技术社区  · 15 年前

    我知道%~dp0,它表示包含批处理脚本的完全扩展目录,但我要查找的是:

    • 一种从Perl调用批处理脚本的方法,这种方法允许我在不修改的情况下使用批处理脚本,并且其中的所有目录都与批处理脚本的位置相关。
    • 我可以在批处理脚本中放入一条语句,它是一个标志,用于使用批处理脚本的位置作为所有目录的起点。

    我目前正在使用Perl中的此方法调用批处理脚本:

    `"../run.bat" -f $ARGV[$#ARGV]`;
    

    然后捕获输出并对其进行处理。

    3 回复  |  直到 15 年前
        1
  •  5
  •   innaM    15 年前

    我不太确定我理解你的问题。但是,为什么不简单地将Perl脚本中的当前目录更改为批处理脚本的目录,然后调用批处理脚本呢?

        2
  •  3
  •   Pesto    15 年前

    使用 pushd popd .添加行

    @pushd %~dp0
    

    到批处理脚本的开头。这将把工作目录更改为批处理文件的基本目录。为了完整性(如果批处理文件将被其他批处理文件使用),您应该添加

    @popd
    

    最后。

        3
  •  0
  •   singingfish    15 年前

    下面是一个BAT脚本,它启动catalyst server perl脚本,该脚本包含在相对于.bat脚本的位置中:myphp/script/

    set bindir=%~dp0
    set perlpath=%bindir%perl\bin
    set buildpath=%bindir%\bin
    set PATH=%PATH%;%perlpath%;%buildpath%
    "%perlpath%\wperl.exe" "%bindir%MyPhp\script\myphp_server.pl" -p 35900
    

    下面是一个vbs脚本,它可以在不显示命令窗口的情况下启动同一个脚本:

    Set fso = CreateObject("Scripting.FileSystemObject")
    Set WshShell = CreateObject("WScript.Shell")
    WshShell.Run chr(34) &  fso.GetParentFolderName(wscript.ScriptFullName) & "\perl shell.bat"& Chr(34), 0
    Set WshShell = Nothing
    

    很可怕的东西,但它起作用了