gpt4 book ai didi

windows - 如何在批处理文件中用空格分隔嵌入空格的双引号字符串?

转载 作者:可可西里 更新时间:2023-11-01 09:46:09 25 4
gpt4 key购买 nike

我正在努力改进我提出的作为对 How to write a batch file showing path to executable and version of Python handling Python scripts on Windows? 的回答的脚本问题。为了防止 Open With 对话框,我想读取 ftype 命令的输出,提取一个可执行文件并检查它是否存在。

在此之后

@echo off
setlocal EnableDelayedExpansion
rem c:\ftype Python.File ->
rem Python.File="c:\path with spaces, (parentheses) and % signs\python.exe" "%1" %*
for /f "tokens=2 delims==" %%i in ('ftype Python.File') do (
set "reg_entry=%%i"
)

reg_entry的内容是

"c:\path with spaces and (parentheses) and % signs\python.exe" "%1" %*

我如何分割这个得到"c:\path with spaces, (parentheses) and % signs\python.exe", "%1" and %*?

编辑
在阅读 Aacini 的回答后,我尝试使用 call 并且它几乎可以工作。但是,它不处理 % 符号。

@echo off
setlocal EnableDelayedExpansion
set input="c:\path with spaces and (parentheses) and %% signs\python.exe" "%%1" %%*
echo !input!
call :first_token output !input!
echo !output!
goto :eof

:first_token
set "%~1=%2"
goto :eof

输出

"c:\path with spaces and (parentheses) and % signs\python.exe" "%1" %*
"c:\path with spaces and (parentheses) and 1"

最佳答案

另一种与 CALL 解析器非常相似的解析器是简单的 FOR。有两个复杂的因素:

1- 如果启用延迟扩展,则不能扩展 FOR,以防它包含 !。这很容易处理。

2- 内容不得包含通配符 *?? 可以临时替换然后返回。但是没有简单的方法来搜索和替换 *

由于这个问题是试图解析出一个路径,而路径中不能包含通配符,所以这个问题不用CALL也很容易解决。为了完整性,我在测试用例中添加了 !

@echo off
setlocal disableDelayedExpansion
set input="c:\path with spaces, ampersand &, carets ^ and (parentheses)! and %% signs\python.exe" "%%1" %%*
set input
set "output="
setlocal enableDelayedExpansion
for %%A in (!input!) do if not defined output endlocal & set output=%%A
set output

如果我们可以依赖第一个标记始终用引号括起来的事实,那么解决方案就更容易了。我们可以使用 FOR/F,同时将 EOL 和 DELIMS 设置为 "

@echo off
setlocal disableDelayedExpansion
set input="c:\path with spaces, ampersand &, carets ^ and (parentheses)! and %% signs\python.exe" "%%1" %%*
set input
set "output="
setlocal enableDelayedExpansion
for /f eol^=^"^ delims^=^" %%A in ("!input!") do endlocal & set output="%%A"
set output

但是,我只是查看了我的 FTYPE 输出,发现有些条目没有被引用,即使它们在路径中包含空格!我认为此页面上的任何答案都无法解决这个问题。事实上,问题背后的整个前提可能存在缺陷。

关于windows - 如何在批处理文件中用空格分隔嵌入空格的双引号字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7935308/

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