2013-03-27 64 views
1

我这里有一个问题,匹配第一个字符在MS-DOS

我想要写在文件中匹配一个字符,然后exec的一些命令,但我有这个毛病,..!你可以尝试这些命令..

c:>\echo 1 >file.txt 
c:>\set /p var=<file.txt 
c:>\if %var% EQU "1" (echo 21) ELSE (echo 10) 

你会得到的值是10,我尝试另一种方式写入文件中的变量。

c:>\set /p=1 <nul>file.txt 
c:>\set /p var=<file.txt 
c:>\if %var% EQU "1" (echo 21) ELSE (echo 10) 
如果您要查看的 file.txtvar数据

c:>\type file.txt 
1 
c:>\echo %var% 
1 
c:>\if %var% EQU "1" (echo 21) ELSE (echo 10) 
10 

感谢帮助。

+0

我非常怀疑你正在使用MS DOS ......你真的在使用什么操作系统? XP和更新的命令提示符与MS DOS非常不同。如果您在NT 6+上执行某些命令,您的操作系统也可能很重要。另外,你的问题到底是什么?你想匹配什么? – 2013-03-27 16:22:02

+2

您的%var%不是“1”,它是“1”。使用echo验证 - %var% - – Stephan 2013-03-27 16:23:37

+0

问题是“if”sintax,右边是: _if%var%EQU 1(echo 21)ELSE(echo 10)_ – 2013-05-20 10:03:01

回答

1

随着set /a命令,您可以从数值变量中删除不需要隐形空间。试试这个:

C:\>echo 1 >file.txt 

C:\>set /p var=<file.txt 

C:\>set /a var=%var% 
1 
C:\>if "%var%" EQU "1" (echo 21) ELSE (echo 10) 
21 
1

正如斯蒂芬所建议的,您正在呼应1*space*file.txt。尝试把你的重定向在该行的开头,就像这样:

>file.txt echo 1 

你也可以在括号括起来echo命令,像这样:

(echo 1)>file.txt 

我觉得>file.txt echo 1(echo 1)>file.txt更具可读性,但你的里程可能有所不同。

不幸的是,你不能简单地1后去除空间解决问题,因为CMD将它解释为echo stdout>file.txtfile.txt将有内容ECHO is on.

0

谨防行后的空白,ECHO 1>file.txt会将STDOUT的输出指向文件,因为您在重定向器之前有一个数字。

ECHO 1 >file.txt 
FOR /f "delims=" %%i IN (file.txt) DO ECHO +%%i+ 
(ECHO 2) >file.txt 
FOR /f "delims=" %%i IN (file.txt) DO ECHO +%%i+ 
>file.txt ECHO 3 
FOR /f "delims=" %%i IN (file.txt) DO ECHO +%%i+ 
>file.txt (ECHO 4) 
FOR /f "delims=" %%i IN (file.txt) DO ECHO +%%i+ 

接下来的一点是,1var的内容,这是不等于"1"

环境变量始终是字符串。

纠正这if "%var%" equ "1" (echo 21) ELSE (echo 10)

相关问题