我需要从父目录调用另一个目录中的批处理文件 但被调用的批处理文件需要在被调用的目录中运行,而不是父目录。
实施例
C:\批次\ DeleteAll.bat
DeleteAll.bat调用另一个目录中的另一个DeleteAll.bat C:\批次\ 1 \ DeleteAll.bat
然后它应该删除C:\ Batch \ 1 \
中的所有文件我该怎么做?
我试过但它运行父目录中的C:\ Batch \ 1 \ DeleteAll.bat,而不是子目录
===
好的,我设法用文件夹名称
中的空格解决了这个问题问题是我没有在子批处理文件中添加引号
要解决问题,我需要在命令中添加引号
DEL“%~dp0 * .txt”
如果你还在读这个.. 谢谢Tone,您的解决方案有效。
答案 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
恢复保存的目录