批处理文件不会回显到文件中

时间:2014-09-17 21:34:42

标签: windows batch-file cmd echo yaml

为什么这些行不起作用?

echo   POSITION-X: %shopxpos%>>shop%shopid%.yml
echo   POSITION-Y: %shopypos%>>shop%shopid%.yml
if "%shopincludedata%" == "y" (echo   DATA-VALUE: %shopitemdata%>>shop%shopid%.yml) else if "%shopincludedata%" == "Y" (echo   DATA-VALUE: %shopitemdata%>>shop%shopid%.yml) else if "%shopincludedata%" == "yes" (echo   DATA-VALUE: %shopitemdata%>>shop%shopid%.yml) else if "%shopincludedata%" == "YES" (echo   DATA-VALUE: %shopitemdata%>>shop%shopid%.yml) else if "%shopincludedata%" == "Yes" (echo   DATA-VALUE: %shopitemdata%>>shop%shopid%.yml)

他们只是不吐出文件 这是我正在使用的文件:https://www.dropbox.com/s/xui34kgkdjmee3p/ChestCommands.bat?dl=0

1 个答案:

答案 0 :(得分:3)

问题是%shopxpos%和%shopypos%的值是单位数字,而单位数字用于标识应重定向的文件句柄。您希望将该数字视为文本字符串值为ECHOed,但解析器将该数字视为文件句柄标识符。

最简单的解决方案是将重定向移动到命令的前面。它可以出现在任何地方。

我不会检查“是”的所有变体。相反,我会检查第一个字符是否为Y,不区分大小写。

>>shop%shopid%.yml echo   POSITION-X: %shopxpos%
>>shop%shopid%.yml echo   POSITION-Y: %shopypos%
if /i "%shopincludedata:~0,1%" == "y" >>shop%shopid%.yml echo   DATA-VALUE: %shopitemdata%

或者更好的是,使用括号并仅重定向一次。

>>shop%shopid%.yml (
  echo   POSITION-X: %shopxpos%
  echo   POSITION-Y: %shopypos%
  if /i "%shopincludedata:~0,1%" == "y" echo   DATA-VALUE: %shopitemdata%
)