0

如何实现以下代码:

@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
4

3 回答 3

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 : '');
于 2013-11-01T23:51:11.350 回答
0

假设您有这两个脚本,一个调用目录选择对话框,另一个执行一系列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命令中用于更改为对话框中所选目录的父目录。(它更改为父目录,因为假定所选目录是后续命令OUTLAST_REPACK_GZK中引用的目录。)app\arc

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

于 2013-11-01T21:57:48.540 回答
0

非常感谢您的回答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
于 2013-11-02T06:54:54.137 回答