查找当前文件夹的路径-cmd

查找当前文件夹的路径-cmd,cmd,Cmd,我使用此脚本查找当前文件夹及其.bat文件: for /f %%i in ("%0") do set curpath=%%~dpi echo %curpath% 如果路径中包含空格(D:\Scripts\All Scripts->仅检索D:\Scripts\,如果我将其放置在文件夹中,其路径中没有空格,则它将检索完整路径),则它无法正常工作。我怎样才能修好它 for /f "delims=" %%i in ("%0") do set "curpath=%%~dpi" echo "%cur

我使用此脚本查找当前文件夹及其.bat文件:

for /f %%i in ("%0") do set curpath=%%~dpi 
echo  %curpath% 
如果路径中包含空格(D:\Scripts\All Scripts->仅检索D:\Scripts\,如果我将其放置在文件夹中,其路径中没有空格,则它将检索完整路径),则它无法正常工作。我怎样才能修好它

for /f "delims=" %%i in ("%0") do set "curpath=%%~dpi"
echo "%curpath%"

如果路径包含任何
&
字符,则需要双引号。

2015-03-30:已编辑-已添加缺少的信息

要检索当前目录,可以使用保存当前active directory的动态
%cd%
变量

设置“curpath=%cd%”
这将为根目录生成一个带有结束反斜杠的值,并为其余目录生成一个不带反斜杠的值。您可以使用以下命令强制并结束任何目录的反斜杠:

对于(“%cd%\”)中的%%a,请设置“curpath=%%~fa”
或者,您可以使用另一个动态变量:
%\uuuuuuu CD%
,该变量将返回当前active directory,并带有一个结束反斜杠

另外,请记住
%cd%
变量可以直接赋值。在这种情况下,返回的值将不是当前目录,而是指定的值。您可以通过引用当前目录来防止这种情况

对于(“.\”)中的%%a,设置“curpath=%%~fa”
在windows XP之前,
%\uuuuu CD\uuuuu%
变量具有相同的行为。它可以被用户覆盖,但至少从windows 7(我无法在Vista上测试)开始,允许对
%\uuuuu CD%
进行任何更改,但在读取变量时,将忽略更改的值并检索正确的当前active directory(注:使用
set
命令仍可以看到更改的值)

但是前面的所有代码都将返回当前active directory,而不是存储批处理文件的目录

set“curpath=%~dp0”
它将返回存储批处理文件的目录,并以反斜杠结尾

但如果在批处理文件中使用了
shift
命令,则此操作将失败

shift
回波%%dp0
由于批处理文件的参数已移位,因此对当前批处理文件的
%0
引用将丢失

为了避免这种情况,您可以在任何移位之前检索对批处理文件的引用,或者将语法更改为
shift/1
,以确保移位操作将从第一个参数开始,而不影响对批处理文件的引用。如果不能使用任何此选项,则可以在对子例程的调用中检索对当前批处理文件的引用

@echo关闭
setLocalEnableExtensions
rem销毁批处理文件引用
转移
回显批处理文件夹为“%~dp0”
rem调用子例程以获取批处理文件夹
调用:getBatchFolder batchFolder
回显批处理文件夹为“%batchFolder%”
退出/b
:getBatchFolder returnVar
设置“%~1=%~dp0”&退出/b
如果调用批处理文件名时引用了批处理文件名,但未使用完整引用(读取),则此方法也是必要的。

使用此代码

@echo off
:: Get the current directory

for /f "tokens=* delims=/" %%A in ('cd') do set CURRENT_DIR=%%A

echo CURRENT_DIR%%A 
(回显此代码以确认此代码正常工作)

@echo off
:: Get the current directory

for /f "tokens=* delims=/" %%A in ('cd') do set CURRENT_DIR=%%A

echo CURRENT_DIR%%A