【问题标题】:Folder chooser dialog from a Windows batch scriptWindows 批处理脚本中的文件夹选择器对话框
【发布时间】:2013-11-01 20:32:16
【问题描述】:

如何实现以下代码:

@if (@a==@b) @end /*

:: fchooser2.bat
:: batch portion

    @echo off
    setlocal

    for /f "delims=" %%I in ('cscript /nologo /e:jscript "%~f0"') do (
        echo You chose %%I
    )

    goto :EOF

    :: JScript portion */

    var shl = new ActiveXObject("Shell.Application");
    var folder = shl.BrowseForFolder(0, "Please choose a folder.", 0, 0x00);
    WSH.Echo(folder ? folder.self.path : '');

结果如下:

在这段代码中:

@echo off 
color a

app\arc x -ep1 -i2 -w. -dp.\OUTLAST_REPACK_GZK\Outlast DATA_0.bin -msrep:d
app\arc x -ep1 -i2 -w. -dp.\OUTLAST_REPACK_GZK\Outlast\_CommonRedist DATA_1.bin -msrep:d
app\arc x -ep1 -i2 -w. -dp.\OUTLAST_REPACK_GZK\Outlast\OLGame DATA_2.bin -msrep:d
app\arc x -ep1 -i2 -w. -dp.\OUTLAST_REPACK_GZK\Outlast\Engine DATA_3.bin -msrep:d
app\arc x -ep1 -i2 -w. -dp.\OUTLAST_REPACK_GZK\Outlast\Binaries DATA_4.bin -msrep:d

选择要批量提取文件的目标文件夹。

像下面这样或其他方式,我不知道该怎么做:

app\arc x -ep1 -i2 -w. -dp.\%FCHOOSER2%\Outlast DATA_0.bin -msrep:d

【问题讨论】:

    标签: windows batch-file vbscript cmd folderbrowserdialog


    【解决方案1】:

    这应该可以工作 - 但我不确定-dp 开关和句号的语法。检查 arc.exe 文档。

    pause 将允许您阅读任何错误消息。

    @if (@a==@b) @end /*
    
    :: fchooser2.bat
    :: batch portion
    
        @echo off
        setlocal
    
        for /f "delims=" %%I in ('cscript /nologo /e:jscript "%~f0"') do (
            echo You chose "%%I"
            set "folder=%%I"
        )
    
    
    @echo off 
    color a
    
    
    
    app\arc x -ep1 -i2 -r -w. -dp"%folder%\Outlast" DATA_0.bin -msrep:d
    app\arc x -ep1 -i2 -r -w. -dp"%folder%\Outlast\_CommonRedist" DATA_1.bin -msrep:d
    app\arc x -ep1 -i2 -r -w. -dp"%folder%\Outlast\OLGame" DATA_2.bin -msrep:d
    app\arc x -ep1 -i2 -r -w. -dp"%folder%\Outlast\Engine" DATA_3.bin -msrep:d
    app\arc x -ep1 -i2 -r -w. -dp"%folder%\Outlast\Binaries" DATA_4.bin -msrep:d
    pause
    
        goto :EOF
    
        :: JScript portion */
    
        var shl = new ActiveXObject("Shell.Application");
        var folder = shl.BrowseForFolder(0, "Please choose a folder.", 0, 0x00);
        WSH.Echo(folder ? folder.self.path : '');
    

    【讨论】:

      【解决方案2】:

      假设您有这两个脚本,一个调用目录选择对话框,另一个执行一系列app\arc 命令,在两个单独的文件中,您可以尝试以这种方式只修改前者:

      @if (@a==@b) @end /*
      
      :: fchooser2.bat
      :: batch portion
      
      @echo off
      setlocal
      
      for /f "delims=" %%I in ('cscript /nologo /e:jscript "%~f0"') do (
          cd /d "%%~I\.."
      )
      
      call myarchive.bat
      
      goto :EOF
      
      :: JScript portion */
      
      var shl = new ActiveXObject("Shell.Application");
      var folder = shl.BrowseForFolder(0, "Please choose a folder.", 0, 0x00);
      WSH.Echo(folder ? folder.self.path : '');
      

      如您所见,对话框返回的路径在cd /d 命令中用于更改为对话框中所选目录的父目录。 (它更改为父目录,因为假定所选目录是后续app\arc 命令中引用的OUTLAST_REPACK_GZK。)

      然后脚本继续调用myarchive.bat,假定它是另一个批处理文件的名称,即运行app\arc 命令的那个。 (您可能需要将此名称更改为真实名称。)

      【讨论】:

        【解决方案3】:

        非常感谢您的回答foxidrive。我用它来实现以下内容:

        @if (@a==@b) @end /*
        
        :: fchooser2.bat
        :: batch portion
        
        @echo off
        setlocal
        
        for /f "delims=" %%I in ('cscript /nologo /e:jscript "%~f0"') do (
            set FLDR=%%I
        )
        app\arc x -ep1 -i2 -r -w. -dp"%FLDR%\outlast" DATA_0.bin -msrep:d
        goto :EOF
        
        :: JScript portion */
        
        var shl = new ActiveXObject("Shell.Application");
        var folder = shl.BrowseForFolder(0, "Elija la carpeta de instalacion.", 0, 0x00);
        WSH.Echo(folder ? folder.self.path : '');
        

        -r 选项是下一行中的键,表示递归。

        app\arc x -ep1 -i2 -r -w. -dp"%FLDR%\outlast" DATA_0.bin -msrep:d
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-11-29
          • 1970-01-01
          • 1970-01-01
          • 2011-10-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多