我在尝试编译Java程序时遇到错误.
我在Windows上(这是一个特定于Windows的问题),我安装了最新的JDK.
我尝试过涉及PATH变量的解决方案,但错误仍然存在.
控制台输出:
C:\>set path=C:Program Files (x86)\Java\jdk1.7.0\bin
C:\>javac Hello.java
'javac' is not recognized as an internal or external command,
operable program or batch file.
Run Code Online (Sandbox Code Playgroud) 我遇到了ss64.com,它为如何编写Windows命令解释器将运行的批处理脚本提供了很好的帮助.
但是,我一直无法找到批处理脚本的语法,扩展或不扩展的方法,以及如何逃避事情的良好解释.
以下是我无法解决的示例问题:
foreach $i (@ARGV) { print '*' . $i ; }),编译它并以这种方式调用它:
my_script.exe "a ""b"" c"?输出是 *a "b*cmy_script.exe """a b c"""?输出它*"a*b*c"echo命令如何工作?在那个命令中扩展了什么?for [...] %%I在文件脚本中使用,但for [...] %I在交互式会话中?%PROCESSOR_ARCHITECTURE%字面回声?我发现echo.exe %""PROCESSOR_ARCHITECTURE%有效,有没有更好的解决方案?%配对?例:
set b=a,echo %a %b% c%?%a a c%set a =b,echo %a %b% c%?bb c%是否可以在app.config或web.config文件中执行以下操作?
<appSettings>
<add key="MyBaseDir" value="C:\MyBase" />
<add key="Dir1" value="[MyBaseDir]\Dir1"/>
<add key="Dir2" value="[MyBaseDir]\Dir2"/>
</appSettings>
Run Code Online (Sandbox Code Playgroud)
然后我想在我的代码中访问Dir2,只需说:
ConfigurationManager.AppSettings["Dir2"]
Run Code Online (Sandbox Code Playgroud)
当我在不同的服务器和位置安装我的应用程序时,这将帮助我,我将只需要更改我的整个条目app.config.(我知道我可以管理代码中的所有连接,但我更喜欢这种方式).
人们已经在批处理文件中嵌入和执行VBScript很长一段时间了.但是我所看到的所有已发布的解决方案(在此问题最初提出时)都涉及编写临时VBS文件.例如:在Windows批处理文件中嵌入VBScript.
是否可以在批处理中执行嵌入式VBScript而无需编写临时文件?
我想也许这是一个系统问题,但最近做了一个全新的安装(win7 64位)和一个干净的安装conemu(旧的win32系统上的conemu和console2都有同样的问题).我发现研究的所有内容都与通过命令行添加变量有关.我这样做是通过开始 - >控制面板 - >系统 - >高级系统设置,然后重新启动控制台.cmd正确地拾取路径.
当我手动向系统或用户PATH变量添加新路径然后重新启动控制台并回显%path%时,它没有重新加载新的PATH变量.
CMD.EXE:
C:\Users\lotus>echo %path%
C:\Python33\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\
System32\WindowsPowerShell\v1.0\;C:\Program Files\nodejs\;C:\PHP;C:\ProgramData\
Composer\bin;C:\PHP;C:\PHP\ext;C:\Ruby200-x64\bin;C:\Users\lotus\AppData\Roaming
\npm
Run Code Online (Sandbox Code Playgroud)
conemu:
C:\Program Files\ConEmu>echo %path%
C:\Program Files\ConEmu\ConEmu;C:\Program Files\ConEmu;C:\Python33\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Ruby200-x64\bin
Run Code Online (Sandbox Code Playgroud)
我知道有一个额外的C:\ PHP但这是另一个问题.如果我删除它,我仍然有同样的问题.
谢谢
我尝试在全新的Windows 7安装上运行nodejs.这就是我所做的:
使用Windows安装程序安装节点
确保将文件解压缩到 C:\Program Files (x86)\nodejs\
确保我的Path环境变量包含 C:\Program Files (x86)\nodejs\
打开命令提示符并运行 node -v
这给了我'node is not a recognized ...'- 消息.
我在这里错过了什么?
更新
运行echo %path%为我提供了一个不包含的目录列表C:\Program Files (x86)\nodejs\,即使查看系统属性中的"环境变量"选项卡也会在路径下显示它.多数民众赞成.
我正在开展几个项目,其中一些正在使用不同的JDK.在JDK版本之间切换并不舒服.所以我想知道是否有任何简单的方法来改变它?
我找到了2种方法,它们应该可以解决这个问题,但它不起作用.
第一个解决方案是创建这样的bat文件:
@echo off
echo Setting JAVA_HOME
set JAVA_HOME=C:\Program Files\Java\jdk1.7.0_72
echo setting PATH
set PATH=C:\Program Files\Java\jdk1.7.0_72\bin;%PATH%
echo Display java version
java -version
pause
Run Code Online (Sandbox Code Playgroud)
在运行这个蝙蝠之后,我看到了正确的Java版本.但当我关闭这个CMD并打开一个新的并输入"java -version"时,它说我仍然有1.8.0_25.所以它不起作用.
我找到的第二个解决方案是来自该站点的应用程序.它也不起作用.与第一种解决方案相同的效果.
有任何想法吗?因为通过以下方式更改JAVA_HOME和PAHT:Win + Pause - >高级系统设置 - >环境变量 - >并编辑这些变量,这是很糟糕的方式......
我有一个调用vbscript文件的批处理文件.我试图让vbscript文件更改一个环境变量,该变量稍后在调用vbscript文件的批处理文件中使用.
这是文件中的片段.
Parent.bat
Set Value="Initial Value"
cscript Child.vbs
ECHO Value = %VALUE%
Run Code Online (Sandbox Code Playgroud)
Child.vbs
Set wshShell = CreateObject( "WScript.Shell" )
Set wshSystemEnv = wshShell.Environment( "Process" )
wshSystemEnv("VALUE") = "New Value"
Run Code Online (Sandbox Code Playgroud) 这开始让我发疯了......但似乎我不幸自己想出来:/
我需要设置一个机构共享两个从机之间的字符串值,例如,名为从属甲和从乙.
目前我发现的最接近的是这个问题: Jenkins Slave Environment Variable Refresh
但它仍然旨在启用buildcripts中的访问,而不是Slaves环境变量本身.(相关SO问题:如何在Jenkins中使用Windows批处理命令使用环境变量?)
目前我有这个设置:
1)在A上工作A被触发.
它执行这个Windows批处理代码(显然,实际路径被替换为'<>'):
cmd /c start java -jar <path_of_slave>\slave.jar -jnlpUrl <url_of_slave>/slave-agent.jnlp
setenv.exe /m HOR_BUILD_ID -delete
setenv.exe /m HOR_BUILD_ID %BUILD_NUMBER%
setenv.exe /m HOR_UPSTREAM_ID -delete
setenv.exe /m HOR_UPSTREAM_ID %JOB_NAME%
Run Code Online (Sandbox Code Playgroud)
相当不言自明和直截了当的imho.
2)A上的作业具有上游作业B,即成功构建时触发.因此,在从属B中,B构建执行此批处理代码(显然,实际路径被替换为'<>'):
SetLocal EnableDelayedExpansion
@echo off
@echo --- Refreshing Environemnt variables...
@echo on
set prgfil=%ProgramFiles(x86)%
call "%WORKSPACE%\..\..\..\tools\misc\resetvars.bat"
@echo --- Reading environment variables...
copy /y "<path_containing_%HOR_UPSTREAM_ID%_variable" "<path_containing_%HOR_BUILD_ID%_variable" …Run Code Online (Sandbox Code Playgroud) 我在我们的TFS构建服务器上安装了npm和grunt.我使用npm install -g grunt-cli安装了grunt-cli,然后在以我自己的身份登录时能够从命令行运行grunt deploy.
Out TFS版本作为tfsservice用户运行,当它尝试执行grunt部署时,它会收到一条错误消息:
'grunt' is not recognized as an internal or external command, operable program or batch file.
Run Code Online (Sandbox Code Playgroud)
所以,当我在构建服务器上以我自己的身份登录时,如果我将命令提示符作为tfsservice运行,我会得到相同的错误.所以我尝试从命令提示符下执行npm install -g grunt-cli,它看起来已经正确安装并在C:\ Users\tfsservice\AppData\Roaming \npm中创建了grunt文件,但是后来我仍然得到了同样的错误当运行grunt部署时.
所以看起来grunt-cli没有为tfsservice安装?当我得到tfsservice%homepath%时,我看到它被设置为\ Windows\system32,而不是预期的\ Users\tfsservice ; 也许这是一个服务帐户与它有关?
我看到类似的问题已被要求在团队城市中使用grunt-cli,但它建议使用Team City特定的插件.
还有这篇帖子说他们改变了Team City作为一个不同的用户运行,然后一切都开始正常工作.尽管如此,将我们的构建更改为以不同于tfsservice的用户身份运行并不是一个真正的选择.
任何建议表示赞赏.谢谢.
我有一个批处理文件“file.bat”,它将使用以下命令调用安装程序:
msiexec.exe /i "%~dp0\installer.msi"
Run Code Online (Sandbox Code Playgroud)
安装程序将安装程序并更新 Path 变量。虽然这工作正常,但问题是当我尝试启动程序时找不到它,因为显然 PATH 变量没有更新。我尝试从内部重新启动批处理文件:
start cmd /c file.bat
Run Code Online (Sandbox Code Playgroud)
但它没有用。有没有办法刷新 PATH 变量或在新进程中重新启动批处理文件,以便检测新环境?
PS:手动重新启动批处理文件当然有效,但这不是我想要的。
谢谢。
windows path batch-file environment-variables windows-server-2012
在 Python 中读取操作系统环境变量是小菜一碟。尝试使用以下三行代码'PATH'在 Windows 中读出变量:
#################
# PYTHON 3.5 #
#################
>> import os
>> pathVar = os.getenv('Path')
>> print(pathVar)
C:\Anaconda3\Library\bin;C:\Anaconda3\Library\bin;
C:\WINDOWS\system32;C:\Anaconda3\Scripts;C:\Apps\SysGCC\arm-eabi\bin;
...
Run Code Online (Sandbox Code Playgroud)
现在对'PATH'变量做一个小的改变。你可以在...里找到它们:
控制面板>>系统和安全>>系统>>高级系统设置>>环境变量
如果您在 Python 中运行相同的代码,则更改不可见!您必须关闭启动 Python 会话的终端。当您重新启动它并再次运行代码时,更改将可见。
有没有办法立即看到变化——而无需关闭python?这对于我正在构建的应用程序很重要。
非常感谢 :-)
编辑 :
Martijn Pieters 向我展示了以下链接: Windows 中是否有从命令提示符刷新环境变量的命令?
该链接中提到了许多选项。我选择了以下一个(因为它只是一个批处理文件,没有额外的依赖项):
REM --------------------------------------------
REM | refreshEnv.bat |
REM --------------------------------------------
@ECHO OFF
REM Source found on https://github.com/DieterDePaepe/windows-scripts
REM Please share any improvements made!
REM Code inspired by /sf/ask/12011191/
IF [%1]==[/?] GOTO :help
IF [%1]==[/help] GOTO :help
IF …Run Code Online (Sandbox Code Playgroud)