【问题标题】:DOS echo %variable% "Echo is ON"DOS echo %variable% "Echo is ON"
【发布时间】:2015-09-21 11:07:54
【问题描述】:

我有一个 dos 批处理文件。

mycommand.exe>c:\temp
find /B Serv c:\temp>c:\temp2
set /p var1=<c:\temp2
SET var2=%var1:~-7%
echo %var2%

这只是DOS,不是windows环境。

问题是,批处理文件输出是: “回声开启”。无法回显 VAR2 变量。

mycommand.exe 是一个简单的应用程序。不重要。

> type c:\temp"
VERSION 45.2
TAG1 NUMBER is 1234567
Serv NUMBER is 9654754

> type c:\temp2
c:temp Serv NUMBER is 9654754

如果我想回显 VAR2 变量,我该怎么办? 我不能使用“setlocal enabledelayedexpansion”,因为 setlocal“命令或文件名无法识别”。

编辑:我到底想要什么? 我想 ECHO mycommand.exe 输出第三行最后 7 个字符。就是这样。

【问题讨论】:

  • DOS set 命令不支持/p。它也不支持替换它只是set variable=value
  • DOS 在 FIND 上是否也有 /B,现在我想起来了?
  • find 在 DOS 和 Cmd 中都没有 /B。 (你想到findstr,它有/b,但在DOS下不可用)

标签: batch-file dos


【解决方案1】:

“good old DOS”是旧的,但不是很好。

基本上可以通过构建一个临时的 .bat 文件来解决您的问题。

这里有详细描述:

https://support.microsoft.com/en-us/kb/66292

我没有可用的 DOS,所以我无法测试,但这应该适合你:

mycommand.exe>c:\temp.txt
find "Serv " c:\temp.txt>c:\temp2.txt

REM init.txt should already exist
REM to create it:
REM   COPY CON INIT.TXT
REM   SET VARIABLE=^Z
REM ( press Ctrl-Z to generate ^Z )
REM
REM also the file "temp2.txt" should exist.

copy init.txt+temp2.txt varset.bat
call varset.bat
for %%i in (%variable%) do set numb=%%i
echo Server number is: %numb%
REM just because I'm curious, does the following work? :
set var2=%variable%
echo var2 is now %var2%

init.txt 的手动创建只需要完成一次,如果你能忍受的话,它总是会创建一个同名的变量(因此最后两行,所以你可以使用相同的 init.txt一遍又一遍 - 请反馈,它是否有效 - 我很好奇)

【讨论】:

    猜你喜欢
    • 2017-06-05
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多