当被调用的批次在不同的驱动器上时如何获取调用批次的驱动器号
How to get the drive letter of the calling batch when the called batch is on a different drive
我有两个 windows 批处理文件:a.bat 和 b.bat。
b.bat 在 D: 驱动器上并且在我的路径中
a.bat 在 E: 驱动器上,其中包含类似以下内容的内容:
call b.bat
echo %thedrive%
b.bat 里面有类似下面的内容:
IF %~d0==D: (
SET %thedrive=testdrive
) ELSE (
SET %thedrive=livedrive
)
问题是 %~d0 正在获取 b.bat 所在的驱动器号,而不是调用 (a.bat) 批处理文件所在的驱动器号。
如何获取调用批处理文件所在的驱动器?
b.bat 无法知道它是从另一个批处理文件中调用的,更不用说调用批处理文件所在的位置了。 b.bat 知道的唯一方法是信息是否作为参数传递,然后您将依赖调用者传递信息。
根据您发布的代码,您似乎希望 a.bat 知道它在哪个驱动器上。如果是这样,您需要将代码从 b.bat 移动到 a.bat。
如果您有许多 .bat 脚本需要设置 thedrive
变量,并且您不想在所有文件中包含所有逻辑,那么我会将 b.bat 更改为如下:
IF /i %~d1==D: (
SET thedrive=testdrive
) ELSE (
SET thedrive=livedrive
)
并且您的每个 a.bat 脚本都必须调用 b.bat 使用:
call b.bat "%~f0"
因为b.bat在路径中,所以直接查看b.bat中的当前目录是什么即可。也就是说,b.bat应该是:
IF %cd:~0,2% == D: (
SET thedrive=testdrive
) ELSE (
SET thedrive=livedrive
)
我有两个 windows 批处理文件:a.bat 和 b.bat。
b.bat 在 D: 驱动器上并且在我的路径中
a.bat 在 E: 驱动器上,其中包含类似以下内容的内容:
call b.bat
echo %thedrive%
b.bat 里面有类似下面的内容:
IF %~d0==D: (
SET %thedrive=testdrive
) ELSE (
SET %thedrive=livedrive
)
问题是 %~d0 正在获取 b.bat 所在的驱动器号,而不是调用 (a.bat) 批处理文件所在的驱动器号。
如何获取调用批处理文件所在的驱动器?
b.bat 无法知道它是从另一个批处理文件中调用的,更不用说调用批处理文件所在的位置了。 b.bat 知道的唯一方法是信息是否作为参数传递,然后您将依赖调用者传递信息。
根据您发布的代码,您似乎希望 a.bat 知道它在哪个驱动器上。如果是这样,您需要将代码从 b.bat 移动到 a.bat。
如果您有许多 .bat 脚本需要设置 thedrive
变量,并且您不想在所有文件中包含所有逻辑,那么我会将 b.bat 更改为如下:
IF /i %~d1==D: (
SET thedrive=testdrive
) ELSE (
SET thedrive=livedrive
)
并且您的每个 a.bat 脚本都必须调用 b.bat 使用:
call b.bat "%~f0"
因为b.bat在路径中,所以直接查看b.bat中的当前目录是什么即可。也就是说,b.bat应该是:
IF %cd:~0,2% == D: (
SET thedrive=testdrive
) ELSE (
SET thedrive=livedrive
)