在我的bat脚本中,我正在调用另一个脚本并将其传递给字符串参数
cscript log.vbs "triggered from folder <foldername> by Eric"
您可以看到字符串参数包含从中调用脚本的文件夹的名称。传递此动态的正确方法是将此文件夹名称动态插入脚本吗?
答案 0 :(得分:19)
如果您想要目前所在的目录,可以从%cd%
获取该目录。那是你当前的工作目录。
如果您要在脚本执行期间更改当前工作目录,只需将其保存在开头:
set startdir=%cd%
然后您可以在代码中使用%startdir%
,无论以后是否有任何更改(影响%cd%
)。
如果您只想获取该路径的 last 组件(根据您的评论),您可以使用以下内容作为基线:
@setlocal enableextensions enabledelayedexpansion @echo off set startdir=%cd% set temp=%startdir% set folder= :loop if not "x%temp:~-1%"=="x\" ( set folder=!temp:~-1!!folder! set temp=!temp:~0,-1! goto :loop ) echo.startdir = %startdir% echo.folder = %folder% endlocal && set folder=%folder%
输出:
C:\Documents and Settings\Pax> testprog.cmd startdir = C:\Documents and Settings\Pax folder = Pax
它的工作原理是从完整路径的末尾复制字符,一次一个,直到找到\
分隔符。它既不漂亮也不高效,但Windows批量编程很少是: - )
修改强>
实际上,有一种简单而有效的方法来获取最后一个组件名称。
for %%F in ("%cd%") do set "folder=%~nxF"
对于这种情况不是问题,但如果您正在处理包含可能以\
结尾的路径的变量,那么您可以通过附加\.
来保证正确的结果
for %%F in ("%pathVar%\.") do set "folder=%~nxF"
答案 1 :(得分:8)