CMD最佳可得技术和环境变量捕获

时间:2015-11-15 04:52:59

标签: batch-file cmd

我有一个由powershell驱动的脚本系统,它调用BAT文件 我想在BAT会话结束时记录Envs,以便它们可用于下一个BAT文件。我找到了我所做的,没有从BAT文件中捕获更改......

更多

我有像

这样的代码

&安培; cmd.exe" / c $ script $ optionalArgs& (echo name ^ = Value& SET)> "" C:\路径\ end_envs.csv"""

$ script == dosomework.bat 似乎工作,即csv文件是用env创建的但是没有$ script创建的那些......而是似乎是初始cmd.exe调用的ENV ...

添加' echo xx'将行放到BAT文件并在$ script中引用的bat文件的底部调用它,一切正常,我在$ script BAT文件的末尾看到了env

  
    

有没有办法欺骗cmd.exe / c将我的额外回显信息视为被调用脚本的一部分?

  

由于

2 个答案:

答案 0 :(得分:1)

... OR

这是$$ script.bat

@ECHO OFF
(
 echo Name=Value
 CALL $script %*
 SET
)>"c:\path\end_envs.csv"

并将您的代码修改为

& cmd.exe "/c $$script $optionalArgs"

whee $$script.bat当然可以是您喜欢的任何名称。

请注意,这假设$script.bat(您实际执行的那个)包含setlocal指令。

如果$script是可变的,那么在批处理文件$$script.bat中尝试

@ECHO OFF
SETLOCAL
(
 echo Name=Value
 set "params=%* "
 CALL %1 %%params:* =%%
 set "params="
 SET
)>"u:\envs.csv"

GOTO :EOF

这假设没有混淆因素(包含cmd敏感的字符的参数,例如 - 正常的字母数字字符串应该没问题)

所以

  • 写出标题行
  • params设置为提供的参数列表+空格
  • 使用参数 remainingparameters 执行子程序 firstparameter call ...%%params:* =%%语法表示" params的值,包括第一个空格"
  • 清除params
  • 列出提醒环境变量。

目标文件名当然取决于您。我使用的名称对我的系统来说非常方便。

所以 - 您可以使用参数(要运行的脚本的名字)+(您需要的任何其他参数)调用此脚本

答案 1 :(得分:0)

最简单的可能是添加

(echo Name^=Value
SET) > "c:\path\end_envs.csv"

到$ script的末尾(或者至少强制在退出之前执行这两行)