Batch file CMD蝙蝠和环境变量的捕获
我有一个由powershell驱动的脚本系统,它调用BAT文件 我想在BAT会话结束时记录环境,以便它们可用于下一个BAT文件。我发现我做了什么,没有从BAT文件中捕获更改 更多 我有这样的代码 &cmd.exe“/c$script$optionalArgs&(echo Name^=Value&SET)>“c:\path\end\u envs.csv” $script==dosomework.bat 这似乎有效,即csv文件是使用env创建的,但没有使用$script创建的。。。而似乎是初始cmd.exe调用的环境 在将'echo xx'行添加到BAT文件并在$script中引用的BAT文件底部调用它之后,一切正常,我在$script BAT文件的末尾看到了env <> P>是否有办法欺骗CMD.EXE/C把我的额外回音信息看作是调用脚本的一部分?Batch file CMD蝙蝠和环境变量的捕获,batch-file,cmd,Batch File,Cmd,我有一个由powershell驱动的脚本系统,它调用BAT文件 我想在BAT会话结束时记录环境,以便它们可用于下一个BAT文件。我发现我做了什么,没有从BAT文件中捕获更改 更多 我有这样的代码 &cmd.exe“/c$script$optionalArgs&(echo Name^=Value&SET)>“c:\path\end\u envs.csv” $script==dosomework.bat 这似乎有效,即csv文件是使用env创建的,但没有使用$script创建的。。。而似乎是初始cm
谢谢最简单的可能是添加
(echo Name^=Value
SET) > "c:\path\end_envs.csv"
到$script结尾(或至少在退出之前强制执行这两行)或
将其命名为$$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关闭
SETLOCAL
(
echo Name=值
设置“参数=%*”
调用%1%%参数:*=%
设置“参数=”
设置
)>“u:\envs.csv”
后藤:EOF
这假设不存在混杂因素(例如,包含cmd
敏感字符的参数-正常字母数字字符串应该可以)
所以
- 写出标题行
- 将
设置为提供的参数列表+空格params
- 执行子例程firstparameter和参数remainingparameters。
语法表示“参数的值,直到并包括第一个空格”call…%%params:*=%%
- 清除
params
- 列出remining环境变量
因此-您可以使用参数(您要运行的脚本的名字)+(您需要的任何其他参数)调用此脚本。回答得好,这就是我想要的。我可以根据我的帖子和其他帖子,将其添加到脚本末尾,但是我希望由框架来处理。我看到的问题是,如果要用args调用abc.bat,而框架bat是doit.bat,我调用“&cmd.exe”/c doit.bat abc.bat args”,那么脚本是否需要使用%1 arg,然后使用所有%2*args?是的
%*
表示“过程的所有参数”,因此传递给$$script
的任何参数都将传递给$script
如果$$script.bat是某个powershell代码块的文件,hmm可以澄清吗?如果是一个文件,那么它需要知道调用什么BAT和传递什么参数。如果我调用doit.BAT,那么%1将是我想要调用的脚本名,这意味着(参数)上的%2需要传递给doit.BAT内部调用的脚本