我卸载了我以前版本的node.js(0.8.11)并从node.js网站下载了最新的0.10.24并安装了它.但是,在运行之后node --version
,它仍然表明我正在运行v0.8.11.显然,在卸载过程中会遗留一些东西,并且在尝试通过npm添加模块时会导致各种错误.我已经看到了针对OSX和Linux的解决方案,但是找不到适合Windows的东西.我正在运行Windows 7 64位.
我希望我的批处理文件只能运行提升.如果未提升,请为用户提供一个选项,以便将批次重新启动.
我正在编写批处理文件来设置系统变量,将两个文件复制到Program Files位置,然后启动驱动程序安装程序.如果Windows 7/Windows Vista用户(启用了UAC,即使他们是本地管理员)在没有右键单击并选择"以管理员身份运行"的情况下运行它,他们将获得"拒绝访问"复制这两个文件并编写系统变量.
如果用户实际上是管理员,我想使用命令自动重启批处理.否则,如果他们不是管理员,我想告诉他们他们需要管理员权限才能运行批处理文件.我正在使用xcopy来复制文件,使用REG ADD来编写系统变量.我正在使用这些命令来处理可能的Windows XP机器.我在这个主题上发现了类似的问题,但没有任何关于将批处理文件重新启动为高架的问题.
Windows FINDSTR命令可怕地记录在案.有一个非常基本的命令行帮助可用FINDSTR /?
,或者HELP FINDSTR
,但是它非常不合适.在https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/findstr上有更多的在线文档.
有许多FINDSTR功能和限制甚至在文档中都没有暗示.如果没有先前的知识和/或仔细的实验,他们也无法预料到.
所以问题是 - 未记录的FINDSTR功能和限制是什么?
此问题的目的是提供许多未记录的功能的一站式存储库,以便:
A)开发人员可以充分利用那里的功能.
B)开发人员不要浪费时间,想知道为什么某些东西看起来不应该起作用.
在回复之前,请确保您知道现有文档.如果HELP涵盖了这些信息,则它不属于此处.
这也不是展示FINDSTR有趣用途的地方.如果逻辑人员可以根据文档预测FINDSTR的特定用法的行为,那么它不属于此处.
同样,如果逻辑人员可以基于任何现有答案中包含的信息预测特定用法的行为,那么再次,它不属于此处.
使用Windows命令提示符,我可以回显%path%并在单独的行上获取结果路径吗?像这样的东西,但对于Windows:
echo $path | tr ':' '\n'
Run Code Online (Sandbox Code Playgroud)
我可以使用vanilla cmd执行此操作,还是需要PowerShell或js脚本?
示例echo%path%output:
C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\Microsoft SQL Server\80\Tools\Binn\;C:\Program Files\Microsoft SQL Server\90\DTS\Binn\;C:\Program Files\Microsoft SQL Server\90\Tools\binn\;C:\Program Files\Microsoft SQL Server\90\Tools\Binn\VSShell\Common7\IDE\;C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies\;
Run Code Online (Sandbox Code Playgroud)
期望的输出:
C:\WINDOWS\system32;
C:\WINDOWS;
C:\WINDOWS\System32\Wbem;
C:\Program Files\Microsoft SQL Server\80\Tools\Binn\;
C:\Program Files\Microsoft SQL Server\90\DTS\Binn\;
C:\Program Files\Microsoft SQL Server\90\Tools\binn\;
C:\Program Files\Microsoft SQL Server\90\Tools\Binn\VSShell\Common7\IDE\;
C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies\;
Run Code Online (Sandbox Code Playgroud) 我想使用修改Windows PATH变量setx
.以下在Windows 8上至少有50%的时间可以正常工作:
setx PATH %PATH%;C:\Python27\;C:\Python27\Scripts\
Run Code Online (Sandbox Code Playgroud)
如果它给出错误"默认参数只能使用2次",那么下面的部分时间会起作用:
setx PATH "%PATH%;C:\Python27\;C:\Python27\Scripts\"
Run Code Online (Sandbox Code Playgroud)
不同之处在于我们将第二个参数包装在引号中.我相信%PATH%
扩展包含空格时引号是必要的.
但是,我在Windows 7上遇到了一些奇怪的问题.在一台特定的Windows 7机器上,我遇到了这个问题:
echo %PATH%
Run Code Online (Sandbox Code Playgroud)
它打印:
C:\Foo\;C:\Bar\;[...lots of stuff...]C:\Baz\
Run Code Online (Sandbox Code Playgroud)
然后我这样做:
setx PATH "%PATH%;C:\Quux\"
Run Code Online (Sandbox Code Playgroud)
然后它说"错误:截断1,024个字符." 现在让我们检查一下PATH包含的内容:
echo %PATH%
Run Code Online (Sandbox Code Playgroud)
它打印:
C:\Foo\;C:\Foo\;C:\Bar\;C:\Bar\;[...lots of stuff, now duplicated...]C:\B
Run Code Online (Sandbox Code Playgroud)
......它被裁减为1,024个字符.由于重复,它跑了过来.同样有趣的是:尽管setx
引发了错误而没有说"成功" ,但PATH的价值也发生了变化.
我能够多次重复这种奇怪的行为(幸运的是我保存了PATH的原始内容).
目前,我知道附加到PATH的唯一可靠方法如下:
echo
路径.
将PATH的内容复制到文本文件中,然后手动添加;C:\Python27\;C:\Python27\Scripts\
到PATH的末尾.
将整个事物复制出文本文件.
setx PATH "<paste the string here>"
该过程在Windows 7和Windows 8上每次都有效.
我应该能够在一个命令中做到这一点.我究竟做错了什么?
谢谢.
我想在Windows CMD提示符中运行一个简单的单行程序来打印我的%PATH%
变量,每行一个条目.
我试过这个:for /f "delims=;" %a in ("%path%") do echo %a
但这只打印第一个条目:
Z:\>for /f "delims=;" %a in ("%path%") do echo %a
Z:\>echo c:\python25\.
c:\python25\.
Run Code Online (Sandbox Code Playgroud)
另外从上面的输出中可以看出,这也是打印echo %a
命令和输出.有没有办法阻止这个?
如果我尝试一个类似的命令,我会得到所有条目,但仍然得到echo %a
输出垃圾邮件的结果.我不明白为什么以下打印所有条目,但我的尝试%PATH%
没有.我怀疑我不懂/F
开关.
Z:\>for %a in (1 2 3) do echo %a
Z:\>echo 1
1
Z:\>echo 2
2
Z:\>echo 3
3
Run Code Online (Sandbox Code Playgroud) 上下文:我需要调用一个Windows批处理脚本,PATH
通过xxx
在其末尾添加另一条路径来更新我,但是:
xxx
'到PATH' aaa;xxx;bbb
'',我需要更新PATH
像' aaa;bbb;xxx
')aaa;bbb;xxx;xxx;xxx;...
' 结束)我尝试过的:
以下功能负责处理任何重复并完成工作
:cleanAddPath -- remove %~1 from PATH, add it at the end of PATH
SETLOCAL ENABLEDELAYEDEXPANSION
set PATH=!PATH:%~2=!
set PATH=!PATH:;;=;!
set PATH=%PATH%;%~2
set P=!P:;;=;!
echo %PATH%
echo -------------
ENDLOCAL
exit /b
Run Code Online (Sandbox Code Playgroud)
但是,它需要延迟扩展本地模式,这意味着:在脚本结束时(或者在这里,在函数结束时cleanAddPath
),已经设置的任何内容都被%PATH%
丢弃.
我可以要求用户(我为其编写脚本)启动他们cmd
的cmd /V:ON
选项(激活延迟扩展,否则默认关闭),但这是不切实际的.
如何按PATH
上述方式修改变量,并在调用所述脚本后仍在当前的DOS会话中更新?
我在我的机器上安装了带有Windows 10的节点,但是我发现节点有些奇怪.
当node -v
从命令行执行操作时,我得到了正在运行的版本v0.10.28
,但我确信我已经通过从node.js下载节点来升级节点,该节点的版本是V4.4.7
.所以我试图从应用程序和功能卸载节点,节点被删除,但通过命令行,我仍然能够做node -v
和返回相同的版本,尝试重新启动机器仍然相同.
有谁知道如何解决这个问题?
我想将%MYSQL_HOME%\bin
和附加%CATALINA_HOME%\bin
到Windows 上的系统环境变量中,但仅当它们尚未附加时Path
我才想附加它们。如何在命令提示符或批处理脚本中执行此操作?
我不知道这里发生了什么。希望有人可以帮助我。
这在我的Mac中效果很好。但是Windows和npm安装中的相同过程会崩溃。这就是我得到的。
编辑
到目前为止,我已经尝试了我所看到的所有内容以及Google搜索产生的每个链接。我试过的建议如下这里:
rm -rf node_modules
npm install
Run Code Online (Sandbox Code Playgroud)
没工作
以管理员身份运行它,
尝试过npm install -g
重新启动xampp服务器
关闭Windows Defender
检查了C:\ Program Files \ nodejs的PATH
除了抛出此POS Windows窗口外,我还没有做任何事情。冰雹苹果!
warn optional SKIPPING OPTIONAL DEPENDENCY: fsevents@^1.0.0 (node_modules\chokidar\node_modules\fsevents):
warn notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.0.17: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})
verbose notsup SKIPPING OPTIONAL DEPENDENCY: Valid OS: darwin
verbose notsup SKIPPING OPTIONAL DEPENDENCY: Valid Arch: any
verbose notsup SKIPPING OPTIONAL DEPENDENCY: Actual OS: win32
verbose notsup SKIPPING OPTIONAL DEPENDENCY: Actual Arch: x64
warn fuse@1.4.4 …
Run Code Online (Sandbox Code Playgroud) 我有一个批处理文件,我使用system("name.bat")
. 在该批处理文件中,我试图读取注册表项的值。从 C++ 调用批处理文件会导致set KEY_NAME=HKEY_LOCAL_MACHINE\stuff
失败。
但是,当我直接运行批处理文件(双击它)时,它运行良好。不知道我做错了什么。
批处理文件:
set KEY_NAME=HKEY_LOCAL_MACHINE\SOFTWARE\Ansoft\Designer\2014.0\Desktop
set VALUE_NAME=InstallationDirectory
REG QUERY %KEY_NAME% /v %VALUE_NAME%
Run Code Online (Sandbox Code Playgroud)
C++文件:
int main(void)
{
system("CALL C:\\HFSS\\setup_vars.bat");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
更新1:
我发现密钥实际上在 64 位注册表中,并且我正在将 C++ 解决方案构建为 32 位。一旦我解决了这个问题,它就会发现注册表项很好。
现在我在将该路径添加到我的PATH变量时遇到了问题。它不是创建系统变量,而是创建用户变量PATH并将其添加到那里。
从命令行运行有效。
代码:
set KEY_NAME=HKLM\SOFTWARE\Ansoft\Designer\2014.0\Desktop\
set VALUE_NAME=InstallationDirectory
FOR /F "usebackq skip=1 tokens=1,2*" %%A IN (`REG QUERY %KEY_NAME% /v %VALUE_NAME%`) DO (
set ValueName=%%A
set ValueType=%%B
set ValueValue=%%C
)
if defined ValueName (
@echo Value Value = %ValueValue%
) else …
Run Code Online (Sandbox Code Playgroud) 如何使用 PowerShell 判断指定文件夹是否在我的 PATH 中?
像这样的函数会很棒:
function FolderIsInPATH($Path_to_directory) {
# If the directory is in PATH, return true, otherwise false
}
Run Code Online (Sandbox Code Playgroud) 这与我的开发项目没有直接关系,但我很好奇.最近,经过大量的打击,我将构建问题追溯到系统PATH变量中的无效条目.在我的机器上,它包含大约20个条目.我猜测必须有一种更简单的方法来验证每个条目的有效性.谁能建议一种方法来检查这个?谢谢你的时间.
batch-file ×6
windows ×6
path ×5
cmd ×3
node.js ×3
npm ×2
powershell ×2
build ×1
findstr ×1
registry ×1
setx ×1
uac ×1
windows-10 ×1