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

Batch file 调用批处理文件以在被调用的目录中运行,batch-file,Batch File,我需要从父目录调用另一个目录中的批处理文件 但是被调用的批处理文件需要在被调用的目录而不是父目录中运行 范例 C:\Batch\DeleteAll.bat del "%~dp0\*.txt" DeleteAll.bat调用另一个目录中的另一个DeleteAll.bat C:\Batch\1\DeleteAll.bat del "%~dp0\*.txt" 然后它应该删除C:\Batch\1中的所有文件\ 我该怎么做 我尝试过,但它在父目录中运行C:\Batch\1\DeleteAll.bat,

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

范例

C:\Batch\DeleteAll.bat

del "%~dp0\*.txt"
DeleteAll.bat调用另一个目录中的另一个DeleteAll.bat C:\Batch\1\DeleteAll.bat

del "%~dp0\*.txt"
然后它应该删除C:\Batch\1中的所有文件\

我该怎么做

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

call "directory 1\DeleteAll.bat"
===


好的,我设法解决了文件夹名中的空间问题

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

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

DEL“%~dp0*.txt”

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

作为一个真实的例子

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

call "directory 1\DeleteAll.bat"
然后在子目录“directory 1”(子目录)中有另一个名为DeleteAll.bat的批处理文件

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

基于服务器故障答案的信息

注意:

如果没有文件与指定的掩码(例如.txt)匹配,则获取“找不到”消息是正常的。批处理文件将继续运行,如果这些文件可能存在或不存在,您可以忽略此消息。如果愿意,可以抑制该消息,如中所示


子批处理文件的替代语法

如果要删除很多掩码和/或希望简化删除语法,可以在子批处理文件中使用以下语法。根据


在该示例中,
pushd
用于保存当前目录(最初运行父批处理文件的位置)
cd
用于切换到包含子批处理文件的目录,然后作为一个真实示例,
popd
还原保存的目录

call "directory 1\DeleteAll.bat"
如果父目录中有以下批处理文件

call "directory 1\DeleteAll.bat"
然后在子目录“directory 1”(子目录)中有另一个名为DeleteAll.bat的批处理文件

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

基于服务器故障答案的信息

注意:

如果没有文件与指定的掩码(例如.txt)匹配,则获取“找不到”消息是正常的。批处理文件将继续运行,如果这些文件可能存在或不存在,您可以忽略此消息。如果愿意,可以抑制该消息,如中所示


子批处理文件的替代语法

如果要删除很多掩码和/或希望简化删除语法,可以在子批处理文件中使用以下语法。根据


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

请参阅。答案还链接到更多信息。我不认为链接解决了我的问题。。我不需要获取目录,我只需要它在被调用的目录中运行命令。你能提供一些真实的例子吗。答案还链接到更多信息。我不认为链接解决了我的问题。。我不需要获取目录,我只需要它在被调用的目录中运行命令。你能提供一些真实的例子吗?我只是在你的例子中测试它,但我不能让它在我自己的目录中运行。我想因为我的父目录中有一个空格。e、 g.C:\Batch File\Error系统找不到指定的路径。您只需引用您的路径即可。我更新了我的答案以进行反思。TessellatingHeckler发布的链接有可能成为一种更干净的方式,但我现在不知道该如何应用它。我已经引用了我的路径(在你修复它之前),但它给出了相同的错误。M:\Batch File>DEL M:\Batch File\1\*.mpg系统找不到指定的路径。。。*.mpg前有一个双反斜杠。但是stackoverflow删除了它。顺便说一句,我正在尝试删除视频文件。该目录中是否确实存在.mpg文件?(M:\Batch File\1)好的,我用文件夹名中的空格解决了这个问题。问题是我没有在子批处理文件中添加引号。要解决此问题,如果您仍在阅读,我需要在命令DEL“%~dp0*.txt”中添加引号。。谢谢Tone,你的解决方案是有效的。我只是在你的示例中测试了它,但我无法让它在我自己的目录中运行。我想因为我的父目录中有一个空格。e、 g.C:\Batch File\Error系统找不到指定的路径。您只需引用您的路径即可。我更新了我的答案以进行反思。TessellatingHeckler发布的链接有可能成为一种更干净的方式,但我现在不知道该如何应用它。我已经引用了我的路径(在你修复它之前),但它给出了相同的错误。M:\Batch File>DEL M:\Batch File\1\*.mpg系统找不到指定的路径。。。*.mpg前有一个双反斜杠。但是stackoverflow删除了它。顺便说一句,我正在尝试删除视频文件。该目录中是否确实存在.mpg文件?(M:\Batch File\1)好的,我用文件夹名中的空格解决了这个问题。问题是我没有在子批处理文件中添加引号。为了解决这个问题,我
call "directory 1\DeleteAll.bat"