【问题标题】:Batch Program Produces Strange Unexpected Output批处理程序产生奇怪的意外输出
【发布时间】:2013-08-27 18:25:25
【问题描述】:

在我记得如何完成我正在做的事情之前,我尝试了一些不同的事情,有点只是在尝试。
我试图完成的是将以下字符串设置为变量,然后在批处理脚本中将其回显:

<?php require('__php__.php'); ?>

我最终在 SO 的帮助下解决了这个问题,但在我到达那里之前,我尝试了这个(出于一些原因):

 set (phpStr=<? php require('__php__.php'); ?>)

我意识到这没有任何意义。但是,cmd shell 如何解释我想要做的事情如下:

 set (phpStr= php require('__php__.php'); ? 0<? 1>)

换句话说,当我在上面的第二个代码块中键入代码,并在脚本中打开 echo 时,cmd shell 中显示的是第三个代码块中的命令。然后出现语法错误,脚本退出。

谁能解释发生了什么? (不是为什么它不起作用。这对我来说很明显,而是它是如何得出它所做的解释的。这是对原始命令的非常棒的重组。我只是不知道它是如何到达那里的。)

【问题讨论】:

  • AIUI Stackoverflow 用于回答编程问题 - 如果您想讨论 CMD 以各种方式运行的方式,那么您最好发布到像 dostips.com/forum 这样的论坛上,那里有一些非常聪明的人讨论与批处理相关的现象 - 以及帮助人们完成更平凡的任务。它在论坛标题中提到了 XP,但讨论了所有版本的 Windows。

标签: variables batch-file cmd escaping output


【解决方案1】:

您需要使用^ 转义重定向和其他有毒字符,否则重定向将处于活动状态并尝试创建文件等。% 是一种特殊情况。

你也可以这样使用:

@echo off
for /f "delims=" %%a in ("<?php require('__php__.php'); ?>") do echo %%a

【讨论】:

  • 这很有用。我没有考虑使用 /f 开关。但是,它并没有回答我的问题。
  • 重定向处于活动状态并尝试创建文件 - 它是无效的批处理语法。您还需要了解什么?
  • 看第二个和第三个代码块的区别。它重新排列字符顺序。有一些事情正在响应括号和三角括号。我想理解这一点,因为如果我理解它,它似乎可以有有用的应用。
猜你喜欢
  • 2020-05-14
  • 2021-07-26
  • 1970-01-01
  • 2023-01-09
  • 1970-01-01
  • 2013-10-04
  • 2020-11-18
  • 2018-08-27
相关资源
最近更新 更多