作者UndeadSion (UndeadSion)
看板EzHotKey
标题Re: [批次] 取得目前所在资料夹位置?
时间Mon Mar 30 01:20:23 2009
start.bat
==========================================================================
@echo off
@IF EXIST "%ProgramFiles%\WowUSBVirusKiller" (
set
PATH="%ProgramFiles%\WowUSBVirusKiller"
start WowUSBSecurity.exe -c KillVirus.exe && start WowUSBAutoUpdate.exe
) ELSE IF EXIST "%ProgramFiles(x86)%\WowUSBVirusKiller" (
set
PATH="%ProgramFiles(x86)%\WowUSBVirusKiller"
start WowUSBSecurity.exe -c KillVirus.exe && start WowUSBAutoUpdate.exe
) ELSE (
set CD="%~dp0" *新增这行後解决。
start WowUSBSecurity.exe -c KillVirus.exe && start WowUSBAutoUpdate.exe
)
=========================================================================
1F:推 UndeadSion:%~dp0 →批次档所在路径,%cd% →目前工作路径 03/29 05:03
2F:→ MikageLin:非常感谢楼上的朋友,我最後用上面的方法解决了,谢谢。 03/29 09:11
好像有点误解,补充说明一下 囧
%~dp0 批次档所在路径,例如
C:\Program Files\Mozilla Firefox\
或 UNC 路径,例如
\\Server\Share\Program Files\Mozilla Firefox\
%~d0 批次档所在磁碟代号,例如
C:
或 UNC 路径的双反斜线
\\
%~p0 批次档所在路径,不含磁碟代号,例如
\Program Files\Mozilla Firefox\
或开头不带双反斜线的 UNC 路径,例如
Server\Share\Program Files\Mozilla Firefox\
%cd% 目前工作路径,非根路径时後面不带反斜线,例如
C:\Program Files\Mozilla Firefox
写个批次档测试一下比较容易了解 %~dp0 与 %cd% 的差别
@ECHO OFF
ECHO %%~dp0 = %~dp0
ECHO %%cd%% = %cd%
PAUSE
当批次档与目前工作路径都在 C:\Program Files\Mozilla Firefox\ 时,执行
批次档结果如下
%~dp0 = C:\Program Files\Mozilla Firefox\
%cd% = C:\Program Files\Mozilla Firefox
请按任意键继续 . . .
若批次档所在路径不变,目前工作路径在 U:\USB\ 时,执行批次档结果如下
%~dp0 = C:\Program Files\Mozilla Firefox\
%cd% = U:\USB
请按任意键继续 . . .
若在批次档中使用 SET 命令将 cd 指定为环境变数,则 %cd% 会被取代,不过
这不表示目前工作路径被改变,所以 SET CD="%~dp0" 这样写应该会有问题说
假设批次档与执行档放在一起,以下有三种方法提供参考
1. 如同原文里的范例,修改 PATH 环境变数
SET PATH=%~dp0
start Program.exe
2. 切换目前工作路径
%~d0
cd %~dp0
start Program.exe
3. 以完整路径方式执行
start "" "%~dp0Program.exe"
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 60.248.159.124
※ 编辑: UndeadSion 来自: 60.248.159.124 (03/30 22:48)
3F:推 chweng:请问要如何取得目前工作路径的磁碟代号呢? 03/31 00:27
4F:→ UndeadSion:%cd:~0,2% 03/31 00:56