2013-03-20 47 views
0

我试图用批处理脚本unrar文件。我想遍历一个文件夹及其子文件夹,并且每当有一个.rar文件时,我都希望它将其内容放入与.rar文件相同的文件夹中。 我正在使用unrar.exe来执行此操作,并且它需要我在raring时指定输出文件夹。 如果我没有指定任何文件夹,它会将它拉到“当前文件夹”,这是batfile的文件夹。批处理文件:如何在(.fileext)中使用FOR/R {目录}遍历目录时保存/使用subdir-name

这是我的代码:

FOR /R %dir_of_file% %%X in (*.rar) do (

"%unrarexe_path%\unrar.exe" x -y -r %%X {set unrarfolder path} 

) 

是否有某种方式来艾薇迭代的for循环,路径保存到我期待直通当前子目录?

喜欢的东西:

set unrar_to_here={haxcommand that will give me current subdirectory in for-loop} 

希望我的问题是可以理解的:)

回答

1

这是不是你想要做什么?只需将当前工作目录设置为包含rar文件的目录并将其提取到当前文件夹即可。虽然我不确定unrar命令的语法。我把它留给你。 :)

FOR /R %dir_of_file% %%X in (*.rar) do (

    pushd "%%~dpX" 
    "%unrarexe_path%\unrar.exe" x -y -r %%X 
    popd 

) 
+0

非常感谢,它完美地工作! 〜dp如何工作? – user2190459 2013-03-20 17:00:15

+0

在'for'循环中,'%%〜xX'符号表示特殊含义。在这种情况下,'〜dp'表示'%% X'的驱动器路径(不带文件名)。有关更多信息,请参阅“help for”的最后几页。对于它的价值,'call'接受与它的参数类似的语法 - 并且作为一个整体来说批处理脚本也是如此。 '%〜f0'表示当前正在运行的批处理脚本的全限定路径和名称,即使在执行时没有提供路径或扩展名。有关更多信息,请参阅“帮助电话”。 – rojo 2013-03-20 17:03:51

+0

@ user2190459 - 如果我的答案解决了您的问题,请考虑[正式接受我的答案](http://meta.stackexchange.com/a/5235/187716)。谢谢! – rojo 2013-03-20 17:08:54

1

试试这个。它会将文件放在与存档文件相同的文件夹中:

@echo off &setlocal 
FOR /R %dir_of_file% %%X in (*.rar) do (
    "%unrarexe_path%\unrar.exe" x -y -r "%%~X" "%%~dpX" 
) 
endlocal