Windows 子表达式中的code>和|(批处理中的转义字符为^)

Windows 子表达式中的code>和|(批处理中的转义字符为^),windows,bash,batch-file,vbscript,Windows,Bash,Batch File,Vbscript,要创建包含多行的输出文件,您必须一次回送一行: set "CONFIG=%CD%\dosbox.conf" type nul >"%CONFIG%" echo foo >>"%CONFIG%" echo windowresolution=%RES% >>"%CONFIG%" echo bar >>"%CONFIG%" 或者像这样的逃生路线中断: set "CONFIG=%CD%\dosbox.conf" echo foo ^ windowres

要创建包含多行的输出文件,您必须一次回送一行:

set "CONFIG=%CD%\dosbox.conf"

type nul >"%CONFIG%"

echo foo >>"%CONFIG%"
echo windowresolution=%RES% >>"%CONFIG%"
echo bar >>"%CONFIG%"
或者像这样的逃生路线中断:

set "CONFIG=%CD%\dosbox.conf"

echo foo ^

windowresolution=%RES% ^

bar >"%CONFIG%"
REM "Resolutions 4:3"

if "%RES%" = "800x600" (
  echo Resolution=%RES% >>"%CONFIG%"
  echo windowresolution=640x480 >>"%CONFIG%"
  echo scale=2xsai >>"%CONFIG%"
)
根据
%RES%
的值写入几行可以如下处理:

set "CONFIG=%CD%\dosbox.conf"

echo foo ^

windowresolution=%RES% ^

bar >"%CONFIG%"
REM "Resolutions 4:3"

if "%RES%" = "800x600" (
  echo Resolution=%RES% >>"%CONFIG%"
  echo windowresolution=640x480 >>"%CONFIG%"
  echo scale=2xsai >>"%CONFIG%"
)

首先:始终发布实际错误信息(错误消息、错误编号、引发错误的实际行等)。因为我们没有坐在你的电脑屏幕前,你需要告诉我们屏幕上有什么

话虽如此,您可能会得到一个错误,因为
&
操作符在批处理文件中有特殊意义。它将两个命令彼此分开,因此如果要打印文字
&
,则需要将其转义:

C:\>echo foo & echo bar
foo
bar

C:\>echo foo ^& echo bar
foo & echo bar
为此:

for /F %%A in ('cscript //NoLogo %SCRIPT%') do set RES=%%A
使循环正常工作

不过,仅仅修复循环不会有多大帮助,因为您生成的VBScript一开始不会生成任何输出。您不能将VBScript变量传回批处理脚本,只能将打印输出(
WScript.Echo
WScript.StdOut.WriteLine
)或批处理脚本中的变量传回批处理脚本

但是,正如已经指出的,您首先不需要VBScript,因为您可以使用
wmic
命令行实用程序从批处理文件运行WMI查询:

for /F %%A in (
  'wmic desktopmonitor get ScreenHeight^,ScreenWidth /value ^| find "="'
) do set "%%A"
set "RES=%ScreenHeight%x%ScreenWidth%"
请注意,您需要对子表达式中的
|
进行转义(批转义字符为
^

要创建包含多行的输出文件,您必须一次回送一行:

set "CONFIG=%CD%\dosbox.conf"

type nul >"%CONFIG%"

echo foo >>"%CONFIG%"
echo windowresolution=%RES% >>"%CONFIG%"
echo bar >>"%CONFIG%"
或者像这样的逃生路线中断:

set "CONFIG=%CD%\dosbox.conf"

echo foo ^

windowresolution=%RES% ^

bar >"%CONFIG%"
REM "Resolutions 4:3"

if "%RES%" = "800x600" (
  echo Resolution=%RES% >>"%CONFIG%"
  echo windowresolution=640x480 >>"%CONFIG%"
  echo scale=2xsai >>"%CONFIG%"
)
根据
%RES%
的值写入几行可以如下处理:

set "CONFIG=%CD%\dosbox.conf"

echo foo ^

windowresolution=%RES% ^

bar >"%CONFIG%"
REM "Resolutions 4:3"

if "%RES%" = "800x600" (
  echo Resolution=%RES% >>"%CONFIG%"
  echo windowresolution=640x480 >>"%CONFIG%"
  echo scale=2xsai >>"%CONFIG%"
)

首先:始终发布实际错误信息(错误消息、错误编号、引发错误的实际行等)。因为我们没有坐在你的电脑屏幕前,你需要告诉我们屏幕上有什么

话虽如此,您可能会得到一个错误,因为
&
操作符在批处理文件中有特殊意义。它将两个命令彼此分开,因此如果要打印文字
&
,则需要将其转义:

C:\>echo foo & echo bar
foo
bar

C:\>echo foo ^& echo bar
foo & echo bar
为此:

for /F %%A in ('cscript //NoLogo %SCRIPT%') do set RES=%%A
使循环正常工作

不过,仅仅修复循环不会有多大帮助,因为您生成的VBScript一开始不会生成任何输出。您不能将VBScript变量传回批处理脚本,只能将打印输出(
WScript.Echo
WScript.StdOut.WriteLine
)或批处理脚本中的变量传回批处理脚本

但是,正如已经指出的,您首先不需要VBScript,因为您可以使用
wmic
命令行实用程序从批处理文件运行WMI查询:

for /F %%A in (
  'wmic desktopmonitor get ScreenHeight^,ScreenWidth /value ^| find "="'
) do set "%%A"
set "RES=%ScreenHeight%x%ScreenWidth%"
请注意,您需要对子表达式中的
|
进行转义(批转义字符为
^

要创建包含多行的输出文件,您必须一次回送一行:

set "CONFIG=%CD%\dosbox.conf"

type nul >"%CONFIG%"

echo foo >>"%CONFIG%"
echo windowresolution=%RES% >>"%CONFIG%"
echo bar >>"%CONFIG%"
或者像这样的逃生路线中断:

set "CONFIG=%CD%\dosbox.conf"

echo foo ^

windowresolution=%RES% ^

bar >"%CONFIG%"
REM "Resolutions 4:3"

if "%RES%" = "800x600" (
  echo Resolution=%RES% >>"%CONFIG%"
  echo windowresolution=640x480 >>"%CONFIG%"
  echo scale=2xsai >>"%CONFIG%"
)
根据
%RES%
的值写入几行可以如下处理:

set "CONFIG=%CD%\dosbox.conf"

echo foo ^

windowresolution=%RES% ^

bar >"%CONFIG%"
REM "Resolutions 4:3"

if "%RES%" = "800x600" (
  echo Resolution=%RES% >>"%CONFIG%"
  echo windowresolution=640x480 >>"%CONFIG%"
  echo scale=2xsai >>"%CONFIG%"
)

首先:始终发布实际错误信息(错误消息、错误编号、引发错误的实际行等)。因为我们没有坐在你的电脑屏幕前,你需要告诉我们屏幕上有什么

话虽如此,您可能会得到一个错误,因为
&
操作符在批处理文件中有特殊意义。它将两个命令彼此分开,因此如果要打印文字
&
,则需要将其转义:

C:\>echo foo & echo bar
foo
bar

C:\>echo foo ^& echo bar
foo & echo bar
为此:

for /F %%A in ('cscript //NoLogo %SCRIPT%') do set RES=%%A
使循环正常工作

不过,仅仅修复循环不会有多大帮助,因为您生成的VBScript一开始不会生成任何输出。您不能将VBScript变量传回批处理脚本,只能将打印输出(
WScript.Echo
WScript.StdOut.WriteLine
)或批处理脚本中的变量传回批处理脚本

但是,正如已经指出的,您首先不需要VBScript,因为您可以使用
wmic
命令行实用程序从批处理文件运行WMI查询:

for /F %%A in (
  'wmic desktopmonitor get ScreenHeight^,ScreenWidth /value ^| find "="'
) do set "%%A"
set "RES=%ScreenHeight%x%ScreenWidth%"
请注意,您需要对子表达式中的
|
进行转义(批转义字符为
^

要创建包含多行的输出文件,您必须一次回送一行:

set "CONFIG=%CD%\dosbox.conf"

type nul >"%CONFIG%"

echo foo >>"%CONFIG%"
echo windowresolution=%RES% >>"%CONFIG%"
echo bar >>"%CONFIG%"
或者像这样的逃生路线中断:

set "CONFIG=%CD%\dosbox.conf"

echo foo ^

windowresolution=%RES% ^

bar >"%CONFIG%"
REM "Resolutions 4:3"

if "%RES%" = "800x600" (
  echo Resolution=%RES% >>"%CONFIG%"
  echo windowresolution=640x480 >>"%CONFIG%"
  echo scale=2xsai >>"%CONFIG%"
)
根据
%RES%
的值写入几行可以如下处理:

set "CONFIG=%CD%\dosbox.conf"

echo foo ^

windowresolution=%RES% ^

bar >"%CONFIG%"
REM "Resolutions 4:3"

if "%RES%" = "800x600" (
  echo Resolution=%RES% >>"%CONFIG%"
  echo windowresolution=640x480 >>"%CONFIG%"
  echo scale=2xsai >>"%CONFIG%"
)

批处理文件也会给您一个错误
echo hello&world
作为
echo hello
执行,然后执行
world
给您“world”不是命令…”您必须使用插入符号来转义某些字符(如
&
echo hello^&world
将打印“hello&world”,您的批处理文件也会给您一个错误
echo hello&world
作为
echo hello
执行,然后执行
world
给您“world”不是命令…”您必须使用插入符号来转义某些字符(如
&
echo hello^&world
将打印“hello&world”,您的批处理文件也会给您一个错误
echo hello&world
作为
echo hello
执行,然后执行
world
给您“world”不是命令…”您必须使用插入符号来转义某些字符(如
&
echo hello^&world
将打印“hello&world”,您的批处理文件也会给您一个错误
echo hello&world
作为
echo hello
执行,然后执行
world
给您“world”不是命令…”您必须使用插入符号来转义某些字符(如
&
echo hello^&world
将打印“hello&world”谢谢@Ansgar Wiechers,我明白了,我将编写完整的脚本。好的,我明白了