gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 04:53:36 34 4
gpt4 key购买 nike

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

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

如果路径包含空格,它无法正常工作(D:\Scripts\All Scripts -> 仅检索 D:\Scripts\,如果我放置在文件夹中,其路径没有空格,则会检索完整路径)。我该如何修复它?

最佳答案

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

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

set "curpath=%cd%"

这会为根目录生成一个带有结尾反斜杠的值,而对于其余目录则不带有反斜杠。您可以使用

对任何目录强制并结束反斜杠
for %%a in ("%cd%\") do set "curpath=%%~fa"

或者您可以使用另一个动态变量:%__CD__%,它将返回当前事件目录并以反斜杠结尾。

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

for %%a in (".\") do set "curpath=%%~fa"

直到 Windows XP,%__CD__% 变量具有相同的行为。它可以被用户覆盖,但至少从 Windows 7 开始(我无法在 Vista 上测试它),允许对 %__CD__% 进行任何更改,但是当读取变量时,更改的内容将被更改。值将被忽略,并检索正确的当前事件目录(注意:使用 set 命令更改的值仍然可见)。

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

set "curpath=%~dp0"

它将返回存储批处理文件的目录,并以反斜杠结尾。

但是如果在批处理文件中使用了 shift 命令,这将会失败

shift
echo %~dp0

由于批处理文件的参数已转移,对当前批处理文件的 %0 引用将丢失。

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

@echo off
setlocal enableextensions

rem Destroy batch file reference
shift
echo batch folder is "%~dp0"

rem Call the subroutine to get the batch folder
call :getBatchFolder batchFolder
echo batch folder is "%batchFolder%"

exit /b

:getBatchFolder returnVar
set "%~1=%~dp0" & exit /b

如果在调用时引用批处理文件名并且未使用完整引用(请阅读 here ),则此方法也可能是必要的。

关于cmd - 查找当前文件夹的路径 - cmd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25438172/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com