在被调用的批处理文件中传递相对路径

Passing relative path in called batch file

我需要调用zipjs.bat文件,它以path作为参数。我通过另一个名为start.bat的.bat文件调用.bat文件。两个文件在文件系统中不在同一个位置,它们驻留在不同的文件夹中。

zipjs.bat位于\batch中,start.bat位于\odt中。

要作为参数传递给zipjs.bat的文件与start.bat位于同一文件夹中。

这样(对-source使用绝对路径)一切正常:

1
2
3
call ..\batch\zipjs.bat unzip -source C:\Users
mrd001\git\xslt-framework\Product\dita\transformations\paragraphs\odt\source.odt.zip -destination .\MyDir -keep yes -force no
pause

上面的-source采取绝对路径。但当我用相对路径改变绝对路径时,如:-source .\source.odt.zip,它不起作用。我尝试了与start.bat-.\source.odt.zip和zipjs.bat-..\odt\source.odt.zip相关的路径,但没有成功。


也许最简单的方法是使用%~dp0,它扩展到start.bat的路径,最后以一个反斜杠结束,正如squashman所建议的那样。

另外,我建议在进行解压后清理临时文件目录,因为npocmaka在2015-03-17上一次更新的zipjs.bat没有这样做,请参阅关于如何写一个批处理文件,可以将文件解压到一个同名的新文件夹中?

1
2
3
4
5
6
7
@echo off
call ..\batch\zipjs.bat unzip -source"%~dp0source.odt.zip" -destination .\MyDir -keep yes -force no
for /F"delims=" %%D in ('dir /AD /B"%TEMP%\*source.odt.zip" 2^>nul') do (
    %SystemRoot%\System32\attrib.exe -h"%TEMP%\%%~D"
    rd /S /Q"%TEMP%\%%~D" 2>nul
)
pause