在Bash中,我可以做,EDITOR=vim command
并且command
将EDITOR
设置为来运行vim
,但这不会影响EDITOR
shell本身的值。有可能这样做cmd.exe
吗?
在Bash中,我可以做,EDITOR=vim command
并且command
将EDITOR
设置为来运行vim
,但这不会影响EDITOR
shell本身的值。有可能这样做cmd.exe
吗?
Answers:
请注意,这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
正如下面提到的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/"
您不必在冗长而复杂的命令行中替换组,工件(已使用2次)和版本,而是可以在所述命令的开头对其进行编辑。操作和更改参数值更加清晰/轻松。
'vim'
,但'vim '
在最后的命令。添加内部引号可避免最后出现空格。
cmd /v/c "..."
cmd /c/v "..."
您可以像这样在Windows中进行安装,而无需安装任何工具。
cmd /C "set EDITOR=vim && set"
您将看到一个变量列表,并且将看到EDITOR = vim,现在再次运行“ set”,它将不会列出。
您可以执行多个&&来添加其他命令:
cmd /C "set EDITOR=vim && do this && do that && otherstuff"
编辑:/ C在运行后立即退出新的cmd,如果使用新的cmd产生输出,它将在父窗口中仍然可见。
您可以选择使用/ K,在这种情况下,新的cmd窗口在运行结束时保持打开状态。
set name=foo&&echo %name%
还是set username=foo&&echo %username%
?
您可以env
在GnuWin32 http://gnuwin32.sourceforge.net/中使用来自软件包CoreUtils的移植工具。
env.exe
%PATH%变量中存在的目录env EDITOR=vim command
我已经敲打了一个批处理文件env.cmd
,该批处理文件或多或少像Linux env
命令一样工作:-
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
唯一的区别是,由于cmd
解析的方式,需要对环境分配进行引用,因此您的命令将是:
env "EDITOR=vim" command [up to 8 parameters]
可通过在for
循环内建立命令字符串来详细说明批处理文件,以消除8参数限制(将需要延迟扩展)。
%*
用作倒数第二行(即:DoCmd
标签后的那一行)以允许很长的用户命令?
%*
是原始参数列表:它不受shift
(与$*
Unix中不同)的影响。