【问题标题】:Is it possible to source a batch file in windows cmd like you can in unix?是否可以像在 unix 中一样在 windows cmd 中获取批处理文件?
【发布时间】:2012-10-01 07:18:57
【问题描述】:

我是一个 unix 人,但我必须在 windows 中编写一个系统,并且我正在尝试编写一个脚本来移动一些文件。我正在尝试让父批处理文件调用包含以下内容的子批处理文件:

set REPORTFILE=c:\report.txt

然后我希望父级能够使用 %REPORTFILE% 变量。显然 CALL 命令创建了一个新的上下文。 在 unix 中,你只是 source 脚本,在 windows 中可以吗?

【问题讨论】:

  • 现在我想我可以在 unix REPORTFILE='cat filewithname.txt' 中做一些技巧。 (让相信那些是反引号)在 Windows 中是否有类似的东西?
  • 啊啊啊……是这个吗?设置 /p REPORTFILE=
  • CALL 不会创建新的上下文,除非被调用的脚本/例程发出 SETLOCAL。您应该展示一个您认为失败的完整示例(主示例和子示例)。我怀疑您可能在括号内调用和设置值,这需要延迟扩展。

标签: windows batch-file call


【解决方案1】:

如果我理解...这在 Vista 中似乎对我有用:

caller.bat

echo this is the caller
echo initial value is: %reportfile%
call setter.bat
echo value is: %reportfile%

setter.bat

echo this is the value setter
set reportfile=c:\report.txt

C:\temp>调用者

C:\temp>echo 这是调用者
this is the caller
C:\temp>echo 初始值为:
initial value is:
C:\temp>调用setter.bat

C:\temp>echo 这是值设置器
this is the value setter
C:\temp>设置报告文件=c:\report.txt

C:\temp>回显值为:c:\report.txt
value is: c:\report.txt

更新为使用 goto 而不是括号:

if not exist file.txt goto doit
goto notfound
:doit 
echo this is the caller 
echo initial value is: %reportfile% 
call setter.bat
echo value is: %reportfile%
goto end
:notfound
 echo file found 
:end

【讨论】:

  • 是的,这在 XP 中对我不起作用。如果您运行该脚本然后设置报告文件,您会得到什么?我发现变量是在我的调用上下文中设置的,而不是在脚本中。
  • reportfile=c:\report.txt ...在为我“设置报告文件”之后
  • 我看到你的情况有效,我的情况有点复杂,我改变你的添加括号然后它开始失败,将你的 caller.bat 更改为:如果不存在 file.txt ( echo这是调用者 echo 初始值为:%reportfile% call setter.bat echo value is: %reportfile% ) else ( echo file found )
  • 我认为问题在于 parens () ...我删除并使用了 goto,并且 :labels 并且它起作用了...添加到上面这样代码会更具可读性
  • 是的,我做了同样的事情并让它以这种方式工作,但是括号应该或不应该创建一个新的上下文,它似乎做了一半。没有意义。 Windows 需要更多的 unix。
猜你喜欢
  • 2020-05-31
  • 2012-10-24
  • 2021-01-16
  • 1970-01-01
  • 1970-01-01
  • 2010-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多