调用批处理文件以在被调用目录中运行

时间:2016-06-29 00:09:04

标签: batch-file

我需要从父目录调用另一个目录中的批处理文件 但被调用的批处理文件需要在被调用的目录中运行,而不是父目录。

实施例

C:\批次\ DeleteAll.bat

DeleteAll.bat调用另一个目录中的另一个DeleteAll.bat C:\批次\ 1 \ DeleteAll.bat

然后它应该删除C:\ Batch \ 1 \

中的所有文件

我该怎么做?

我试过但它运行父目录中的C:\ Batch \ 1 \ DeleteAll.bat,而不是子目录

===

好的,我设法用文件夹名称

中的空格解决了这个问题

问题是我没有在子批处理文件中添加引号

要解决问题,我需要在命令中添加引号

DEL“%~dp0 * .txt”

如果你还在读这个.. 谢谢Tone,您的解决方案有效。

1 个答案:

答案 0 :(得分:2)

作为一个真实世界的例子。

如果父目录中有以下批处理文件

call "directory 1\DeleteAll.bat"

然后在子目录"目录1" (子目录)你有另一个名为DeleteAll.bat

的批处理文件
del "%~dp0\*.txt"

父批处理文件调用子批处理文件,该文件删除子目录("目录1")的所有.txt。请记住,您不想尝试删除批处理文件本身(我假设),因此您需要指定您在子批处理文件中要删除的任何掩码。

基于serverfault answer Get directory containing the currently executed batch script

的信息

注意:

如果没有文件与指定的掩码(例如.txt)匹配,则获取无法查找消息是正常的。批处理文件将继续运行,如果这些文件可能存在,也可能不存在,您可以忽略此消息。如果您愿意,可以取消How do I prevent the “Could Not Find” error message from del *.txt?

中显示的消息

子批处理文件的替代语法

如果要删除大量掩码和/或希望简化删除语法,可以在子批处理文件中使用以下语法。基于How do I find the current directory of a batch file, and then use it for the path?

的信息
pushd "%cd%"
cd "%~dp0"

del 1.txt
del 2.mpg
del "name with spaces.mpg"
del *.tmp

popd

在该示例中,pushd用于保存当前目录(最初是您运行父批处理文件的位置)。 cd用于切换到包含子批处理文件的目录,然后popd恢复保存的目录