我有一个由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将我的额外回显信息视为被调用脚本的一部分?
由于
答案 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
设置为提供的参数列表+空格call ...%%params:* =%%
语法表示" params
的值,包括第一个空格" params
目标文件名当然取决于您。我使用的名称对我的系统来说非常方便。
所以 - 您可以使用参数(要运行的脚本的名字)+(您需要的任何其他参数)调用此脚本
答案 1 :(得分:0)
最简单的可能是添加
(echo Name^=Value
SET) > "c:\path\end_envs.csv"
到$ script的末尾(或者至少强制在退出之前执行这两行)