Ber*_*ing 6 windows batch-file
在我的bat脚本中,我正在调用另一个脚本并传递一个字符串参数
cscript log.vbs "triggered from folder <foldername> by Eric"
Run Code Online (Sandbox Code Playgroud)
您可以看到的字符串参数包含从中调用脚本的文件夹的名称.传递此动态的正确方法是将此文件夹名称动态插入脚本?
pax*_*blo 20
如果你想要你目前所在的目录,你可以从中获得%cd%
.那是你当前的工作目录.
如果您要在脚本执行期间更改当前工作目录,请将其保存在开头:
set startdir=%cd%
Run Code Online (Sandbox Code Playgroud)
然后,您可以%startdir%
在代码中使用,无论以后是否有任何更改(影响%cd%
).
如果您只想获取该路径的最后一个组件(根据您的注释),您可以使用以下作为基线:
@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"
Run Code Online (Sandbox Code Playgroud)
对于这种情况不是问题,但是如果您正在处理包含可能结束或不结束的路径的变量\
,那么您可以通过附加来保证正确的结果\.
for %%F in ("%pathVar%\.") do set "folder=%~nxF"
Run Code Online (Sandbox Code Playgroud)
试试%~dp0.
这里:http://weblogs.asp.net/whaggard/archive/2005/01/28/get-directory-path-of-an-executing-batch-file.aspx