查找当前文件夹的路径-cmd
我使用此脚本查找当前文件夹及其.bat文件:查找当前文件夹的路径-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
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