Ale*_*nov 115 windows shell command-line
在 Bash 中,我可以EDITOR=vim command
并且command
将使用EDITOR
set to运行vim
,但这不会影响EDITOR
shell 本身中的值。是否有可能做到这一点cmd.exe
?
Von*_*onC 77
请注意,这cmd /C "set "EDITOR=vim" && echo %EDITOR%"
是行不通的。
也不会cmd /C "setlocal ENABLEDELAYEDEXPANSION && set "EDITOR=vim" && echo !EDITOR!"
你需要:
/V
选项,则使用使延迟的环境变量扩展!
为定界符。&&
(或添加引号)之间没有空格那是:
C:\> cmd /V /C "set EDITOR=vim&& echo '!EDITOR!'"
'vim'
# or
C:\> cmd /V /C "set "EDITOR=vim" && echo '!EDITOR!'"
'vim'
Run Code Online (Sandbox Code Playgroud)
正如下面提到的maoizm,它是cmd /V /C
,没有 cmd /C /V
(这将不工作)
我想不出有什么实际原因你会在单个命令的上下文中真正想要这个
通常,当您必须替换在长命令行中多次使用的值时,您需要这样做。
例如,要将文件部署到 Nexus(多行以提高可读性):
cmd /v /c "set g=com.agroup&& set a=anArtifact&& set v=1.1.0&& \
mvn deploy:deploy-file -Dfile=C:\path\!a!-!v!.jar \
-Dpackaging=jar -DgroupId=!g! -DartifactId=!a! -Dversion=!v! \
-DrepositoryId=nexus
-Durl=http://myserver/nexus/content/repositories/my-repo/"
Run Code Online (Sandbox Code Playgroud)
不必在长而复杂的命令行中替换组、工件(使用 2 次)和版本,您可以在所述命令的开头编辑它们。操作和更改参数值更清晰/更容易。
Vip*_*_Sb 59
您可以在这样的 Windows 中执行此操作,无需安装任何东西。
cmd /C "set EDITOR=vim && set"
Run Code Online (Sandbox Code Playgroud)
你会看到一个变量列表,你会看到 EDITOR=vim,现在再次运行“set”,它不会被列出。
您可以执行多个 && 来添加其他命令:
cmd /C "set EDITOR=vim && do this && do that && otherstuff"
Run Code Online (Sandbox Code Playgroud)
编辑: /C 运行后立即退出新的 cmd,如果您使用新的 cmd 生成输出,它仍将在父窗口中可见。
您可以选择使用 /K,在这种情况下,新的 cmd 窗口在运行结束时保持打开状态。
小智 11
您可以env
在 GnuWin32 http://gnuwin32.sourceforge.net/ 中使用来自 CoreUtils 包的移植 util
env.exe
%PATH% 变量中存在的目录env EDITOR=vim command
小智 6
Vonc 的答案适用于将变量引用为扩展的命令(即而!FOO!
不是%FOO%
)
但是,如果您的命令引用常规变量,它将不起作用。
例如考虑:
some-bat.bat(或任何其他可执行文件/批处理进程)
echo %FOO%
Run Code Online (Sandbox Code Playgroud)
以及主要流程:
set FOO=foo
cmd /V /C "set FOO=bar && some-bat.bat"
Run Code Online (Sandbox Code Playgroud)
返回foo
而不是bar
(但第二次执行会起作用)
但是,您仍然可以连接一个新的 cmd 进程来强制刷新变量。
像这样:
set "FOO=BAR" && cmd /c "echo %FOO%"
Run Code Online (Sandbox Code Playgroud)
或者如果主命令已经必须使用新的 cmd:
cmd /c "set FOO=BAR && cmd /c ^"echo %FOO%^""
Run Code Online (Sandbox Code Playgroud)
我已经创建了一个批处理文件env.cmd
,其工作方式或多或少类似于 Linuxenv
命令:-
echo off
setlocal
for %%f in (%*) do (
echo %%f|find "=" >nul:
if errorlevel 1 goto DoCmd
set %%f
shift
)
:DoCmd
%1 %2 %3 %4 %5 %6 %7 %8 %9
endlocal
Run Code Online (Sandbox Code Playgroud)
唯一的区别是,由于cmd
解析方式的原因,需要引用环境分配,因此您的命令将是:
env "EDITOR=vim" command [up to 8 parameters]
Run Code Online (Sandbox Code Playgroud)
可以通过在循环内构建命令字符串来详细说明批处理文件以消除 8 个参数的限制for
(需要延迟扩展)。
归档时间: |
|
查看次数: |
111124 次 |
最近记录: |