在我的蝙蝠脚本中,我正在调用另一个脚本并传递一个string参数
cscript log.vbs "triggered from folder <foldername> by Eric"
您可以看到的string参数包含脚本被调用的文件夹的名称。 什么是正确的方式来通过这个dynamic插入这个文件夹名称的脚本?
如果你想要的目录,你可以从%cd%
。 这是你目前的工作目录。
如果您要在脚本执行期间更改当前的工作目录,请在开始时保存它:
set startdir=%cd%
那么你可以在你的代码中使用%startdir%
,不管稍后有什么变化(影响%cd%
)。
如果您只想获取该路径的最后一个组件(根据您的评论),则可以将以下内容用作基准:
@setlocal enableextensions enabledelayedexpansion @echo关闭 设置startdir =%cd% 设置温度=%startdir% 设置文件夹= :循环 如果不是“x%temp:〜-1%”==“x \”( 设置文件夹=!temp:〜-1 !!文件夹! 设置temp =!temp:〜0,-1! goto:循环 ) echo.startdir =%startdir% echo.folder =%文件夹% endlocal &&设置文件夹=%文件夹%
这输出:
C:\ Documents and Settings \ Pax> testprog.cmd startdir = C:\ Documents and Settings \ Pax 文件夹= Pax
它通过复制完整路径末尾的字符(一次一个),直到找到\
separator。 它既不漂亮也不高效,但Windows批处理编程很少:-)
编辑
实际上,有一个简单而有效的方法来获取最后的组件名称。
for %%F in ("%cd%") do set "folder=%~nxF"
对于这种情况不是一个问题,但是如果你正在处理一个包含可能或不可能以\
结尾的路径的变量,那么你可以通过追加\.
确保正确的结果\.
for %%F in ("%pathVar%\.") do set "folder=%~nxF"
试试%〜dp0。
这里: http : //weblogs.asp.net/whaggard/archive/2005/01/28/get-directory-path-of-an-executing-batch-file.aspx