批处理文件 (.bat) 相当于 POSIX-like shell 脚本 (.sh)
Batch file (.bat) equivalent to a POSIX-like shell script (.sh)
我在 .sh
文件中有这一行:easy_install -Z --prefix=$PREFIX *.egg
现在我正在研究 Windows 并将此命令转换为我认为等效的批处理文件命令:
easy_install -Z --prefix=%PREFIX% *.egg
但是,我收到以下错误(%PREFIX%
包含 c:\path\to\site-packages
):
Creating C:\path\to\site-packages\site.py
error: Not a URL, existing file, or requirement spec: '*.egg'
linxufan提供了关键指针:
在 Windows 批处理文件中,shell (cmd.exe
) 不会 自动执行 globbing(将文件名模式(通配符表达式)扩展为匹配文件名列表)。
支持 Windows 通配符的命令,例如 dir
, 自己实现 。
相反,literal string *.egg
被传递给你的目标程序,这显然不是这里的意图。
因此,您必须进行自己的通配,并将结果传递给目标程序。
但是,在批处理文件中 稳健地 这样做很棘手;以下工作假设您的文件名既没有 embedded "
也没有 !
字符:
@echo off
setlocal enabledelayedexpansion
:: Do your own globbing and collect the filenames in variable %files%.
set "files="
for %%f in (*.egg) do set files=!files! "%%f"
easy_install -Z --prefix=%PREFIX% %files%
setlocal enabledelayedexpansion
是必需的,因此您可以在 for
循环中迭代地构建 %files%
变量(然后 !...!
-封闭的变量引用动态 扩展)-缺点是 !
个字符。在变量的[=42=]value中也被解释。
为了正确处理带有嵌入 空格 的文件名,每个文件名都添加了包含 "
个字符。 - 缺点是文件名嵌入了 "
个字符。不会被正确处理,但这种情况很少见。
请注意,如果 %PREFIX%
有可能包含空格或其他 shell 元字符,请将选项传递给双引号:"--prefix=%PREFIX%"
.
我在 .sh
文件中有这一行:easy_install -Z --prefix=$PREFIX *.egg
现在我正在研究 Windows 并将此命令转换为我认为等效的批处理文件命令:
easy_install -Z --prefix=%PREFIX% *.egg
但是,我收到以下错误(%PREFIX%
包含 c:\path\to\site-packages
):
Creating C:\path\to\site-packages\site.py
error: Not a URL, existing file, or requirement spec: '*.egg'
linxufan提供了关键指针:
在 Windows 批处理文件中,shell (cmd.exe
) 不会 自动执行 globbing(将文件名模式(通配符表达式)扩展为匹配文件名列表)。
支持 Windows 通配符的命令,例如 dir
, 自己实现 。
相反,literal string *.egg
被传递给你的目标程序,这显然不是这里的意图。
因此,您必须进行自己的通配,并将结果传递给目标程序。
但是,在批处理文件中 稳健地 这样做很棘手;以下工作假设您的文件名既没有 embedded "
也没有 !
字符:
@echo off
setlocal enabledelayedexpansion
:: Do your own globbing and collect the filenames in variable %files%.
set "files="
for %%f in (*.egg) do set files=!files! "%%f"
easy_install -Z --prefix=%PREFIX% %files%
setlocal enabledelayedexpansion
是必需的,因此您可以在for
循环中迭代地构建%files%
变量(然后!...!
-封闭的变量引用动态 扩展)-缺点是!
个字符。在变量的[=42=]value中也被解释。为了正确处理带有嵌入 空格 的文件名,每个文件名都添加了包含
"
个字符。 - 缺点是文件名嵌入了"
个字符。不会被正确处理,但这种情况很少见。
请注意,如果 %PREFIX%
有可能包含空格或其他 shell 元字符,请将选项传递给双引号:"--prefix=%PREFIX%"
.