Windows批处理:获取path而不缩短

我现在search了几个小时,没有find任何适合我的解决scheme。

当我尝试获取batch file的当前path时,我正常使用%〜dp0。 这将导致path如:D:\ VM \ TUTORI〜2 \ STARTS〜1.BAT

但是,这不是一个问题,如果只做文件pipe理,但我想用脚本来调用Vagrant命令。 stream浪汉系统并不像这样缩短的path。 只要path足够短,或者直接从CMD调用它,它就可以正常工作。

我现在正在寻找一种方法来获得我的工作目录的任何未经修改的path。 但是,无论我迄今为止尝试没有工作,谷歌只给我如何人们缩短他们的path。 是否有解决这个问题的实际解决scheme?

我想在我的脚本中设置一个variables,如下所示:D:\ VM \ tutorialtest

编辑:

根据接受的答案,我的工作代码段是没有“-2”的代码片段2. For循环。 这将给我的path,无论文件夹在哪里。

setlocal EnableDelayedExpansion set myPath=%~DP0 set myPath=%myPath:*\=% set fullPath= pushd \ for %%a in ("%myPath:\=" "%") do ( set thisDir=%%~a for /D %%d in ("!thisDir:~0!*") do ( set fullPath=!fullPath!\%%d cd %%d ) ) popd echo Full path: %~D0%fullPath% 

结果:

 D:\VM\tutorialtest 

尝试这个:

 @echo off setlocal EnableDelayedExpansion set "myPath=%~DP0" set "myPath=%myPath:*\=%" set "fullPath=" pushd \ for %%a in ("%myPath:\=" "%") do ( set "thisDir=%%~a" for /D %%d in ("!thisDir:~0,-2!*") do ( set "fullPath=!fullPath!\%%d" cd "%%d" ) ) popd echo Full path: %~D0%fullPath% 

请发布结果。

编辑Bug修复

问题是少于2个字符的名字被切割! (我的错)。

我做了一些测试,看起来for /D %%d in ("TUTORI~2*") ...也返回文件夹的全名,所以thisDir变量不是必需的。 你可以for %%a这种方式修改for %%a循环,得到相同的结果:

 for %%a in ("%myPath:\=" "%") do ( for /D %%d in ("%%~a*") do ( set fullPath=!fullPath!\%%d cd %%d ) ) 

编辑 – 更正了可以使用路径的代码,可以使用或不使用空格。

 for /f "delims=" %i in ('dir ^| findstr /i /c:"Directory of"') do set mypath=%i set mypath=%mypath: Directory of =% 

上面的代码可以直接在命令控制台中输入,如果你想在批处理文件中使用,可以使用下面的代码。

 for /f "delims=" %%i in ('dir ^| findstr /i /c:"Directory of"') do set mypath=%%i set mypath=%mypath: Directory of =% 

我相信你需要得到当前的工作目录(类似Unix中的pwd)。 'dir'命令通常会返回当前路径的详细信息以及variuos的其他详细信息。 我们只是选择目录名称的行(标有“目录”的行),然后在第二行删除标签“目录”(将其替换为无)。

参考下面的链接获取更多的字符串操作技巧。

http://www.dostips.com/DtTipsStringManipulation.php

示例输出 – 在命令控制台上键入

 C:\test\new folder>for /f "delims=" %i in ('dir ^| findstr /i /c:"Directory of"') do set mypath=%i C:\test\new folder>set mypath= Directory of C:\test\new folder C:\test\new folder>set mypath=%mypath: Directory of =% C:\test\new folder>echo.%mypath% 

你试过了吗 :

 set $path=%cd% echo %$path% 

如果在打开cmd窗口时发生这种情况,请在cmd提示符下键入echo %comspec% ,并查看它返回的内容:如果command.com作为其一部分,那么它已被更改。

另一种可能性是用来打开cmd window的快捷方式在属性中有command.com来启动它。

如果使用快捷方式,则尝试从Win + R热键打开cmd提示符,然后输入cmd并输入。 看看这种行为是否已经改变,但也再次检查上面的第一点。