如何实现以下代码:
@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
答案 0 :(得分: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
。)
然后脚本继续调用myarchive.bat
,这被认为是另一个批处理文件的名称,即运行app\arc
命令的文件。 (您可能需要将此名称更改为真实名称。)
答案 1 :(得分:0)
这应该有效 - 但我不确定-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 :(得分: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