.BAT当前文件夹的名称
问题描述:
在我的蝙蝠剧本,我调用另一个脚本,并传递一个字符串参数.BAT当前文件夹的名称
cscript log.vbs "triggered from folder <foldername> by Eric"
的字符串参数,你可以看到包含该脚本是文件夹的名称被称为。什么是正确的方式来通过这动态插入这个文件夹名称的脚本?
答
如果你想你在哪里目前是目录,你可以从%cd%
。这是你目前的工作目录。
如果你想成为改变脚本执行期间当前工作目录,只需将它保存在启动:
set startdir=%cd%
,那么你可以在你的代码中使用%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"
不为这种情况的一个问题,但如果你是在处理包含可能会或可能不会与\
结束路径的变量,那么你可以通过附加\.
for %%F in ("%pathVar%\.") do set "folder=%~nxF"
答
尝试%〜dp0。
@Berming,我已经添加了代码,它会给你路径的最后一个组件。查看更新。 – paxdiablo 2010-10-03 08:28:19
正是我所需要的,非常感谢。我注意到,虽然我'endlocal'后我不能访问'文件夹'变量,所以我拿出了那一行。我想,因为我删除了该行,我还应该删除顶部的@setlocal enableextensions enabledelayedexpansion',但删除该行会导致问题,所以我保留了那一行。 – Berming 2010-10-03 11:25:17
@Berming,看到更新。如果你离开'endlocal',它会影响你以后。你可以使用'setlocal/endlocal'来确保延迟扩展能够正常工作,但是将'endlocal'修改为'endlocal && set folder =%folder%',以便'folder'变量能够转义。 – paxdiablo 2010-10-04 03:42:50