gpt4 book ai didi

windows - 在 `%*` 之后使用 `shift`

转载 作者:可可西里 更新时间:2023-11-01 13:31:42 26 4
gpt4 key购买 nike

我知道在 Windows 批处理文件中,%* 扩展到所有命令行参数,而 shift 移动编号的命令行参数 %1%2 等,但它不会更改 %* 的内容。

如果我想要一个确实反射(reflect)shift效果的%*版本,我该怎么办?我知道我可以在转移后说 %1 %2 %3 %4 %5 %6 %7 %8 %9 但这似乎很愚蠢而且有潜在的危险,这将我限制在固定数量的参数.

虽然这不是特定于 python 的问题,但它可能有助于理解我想要这种行为的原因是我必须编写一个批处理文件 SelectPython.bat 来预配置某些环境变量,为了导航我拥有的不同 Python 发行版的 babel(你必须设置 %PYTHONHOME%%PYTHONPATH%%PATH% 以某些方式调用 Python 二进制文件并确信您将获得正确的发行版)。我当前的脚本可以很好地设置这些变量,但我希望能够在一行中调用它 Python - 例如:

SelectPython C:\Python35  pythonw.exe myscript.py arg1 arg2 arg3 ...

理想情况下,我希望我的批处理文件使用 shift 来“吃掉”第一个参数,相应地处理它并设置环境,然后自动链式执行由其余部分形成的字符串争论。原理类似于env在posix系统中包裹命令的方式:

env FOO=1 echo $FOO     # wrap the `echo` command to be executed in the context of specified environment settings

到目前为止我有这个 - 最后一行是问题所在:

@echo off
set "LOC=%CD%
if not "%~1" == "" set "LOC=%~1
if exist "%LOC%\python.exe" goto :Success

echo "python.exe not found in %LOC%"
goto :eof

:Success
:: Canonicalize the resulting path:
pushd %LOC%
set "LOC=%CD%
popd

:: Let Python know where its own files are:
set "PYTHONHOME=%LOC%
set "PYTHONPATH=%LOC%;%LOC%\Lib\site-packages

:: Put Python's location at the beginning of the system path if it's not there already:
echo "%PATH%" | findstr /i /b /c:"%PYTHONHOME%" > nul || set "PATH=%PYTHONHOME%;%PYTHONHOME%\Scripts;%PATH%

:: Now execute the rest:
shift
if "%~1" == "" goto :eof
%1 %2 %3 %4 %5 %6 %7 %8 %9
:: This is unsatsifactory - what if there are more than 9 arguments?

更新:感谢Stephan我的工作解决方案现在具有以下更改的结束部分:

:: Now execute the rest of the arguments, if any:
shift
if @%1 == @ goto :eof
set command=
:BuildCommand
if @%1 == @ goto :CommandFinished
set "command=%command% %1"
shift
goto :BuildCommand
:CommandFinished
%command%

最佳答案

构建您自己的“%*”(我将其命名为 %params%):

set "params="
:build
if @%1==@ goto :cont
shift
set "params=%params% %1"
goto :build
:cont
echo params are %params%

关于windows - 在 `%*` 之后使用 `shift`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34004969/

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