Her*_*tik 5 cmd batch-file io-redirection
所以我写了一个批处理,其中有一些代码来检查它通过读取文本文件运行了多少次,然后将新的增加的数字写回到该文本文件中。
@ECHO OFF
for /f "delims=" %%x in (TimesRun.txt) do set Build=%%x
set Build=%Build%+1
@echo Build value : %Build%
echo %Build%>>TimesRun.txt
Pause
Run Code Online (Sandbox Code Playgroud)
这确实附加了文本文件,但它添加了“1+1”。傻我!我忘了使用 /a 开关来启用算术运算!但是当我相应地更改代码时......
@ECHO OFF
for /f "delims=" %%x in (TimesRun.txt) do set Build=%%x
set /a Build=%Build%+1
@echo Build value : %Build%
echo %Build%>>TimesRun.txt
Pause
Run Code Online (Sandbox Code Playgroud)
......发生了一些有趣的事情:ECHO 关闭,而不是附加我的文件。写在控制台上。现在,我知道这通常发生在ECHO没有文本或空变量的情况下。我添加了第一个,@echo Build value : %Build%专门查看变量Build是否为空;事实并非如此,并且计算是正确进行的。我已经想通了
>>TimesRun.txt (echo %Build%)
Run Code Online (Sandbox Code Playgroud)
确实带来了预期的结果。我还是不明白为什么
echo %Build%>>TimesRun.txt
Run Code Online (Sandbox Code Playgroud)
不,但是。我错过了什么?
您无意中指定了重定向句柄。
重定向允许您指定某个句柄来定义要重定向的内容:
Run Code Online (Sandbox Code Playgroud)0 = STDIN (keyboard input) 1 = STDOUT (text output) 2 = STDERR (error text output) 3 ~ 9 = undefined
对于输入重定向操作符<,0默认使用handle ;对于输出重定向运算符>和>>,默认句柄是1。
您可以通过在重定向运算符前放置一个数字来显式指定句柄;例如2>定义重定向错误文本输出。
在您的echo命令行中,您无意中执行了此操作,when%Build%是单个数字,1例如:
echo 1>>TimesRun.txt
Run Code Online (Sandbox Code Playgroud)
为避免这种情况,您有以下选择:
要反转语句以便重定向定义首先出现:
>>TimesRun.txt echo %Build%
Run Code Online (Sandbox Code Playgroud)
这是最通用和最安全的重定向方式。
要将重定向的命令括在括号中:
(echo %Build%)>>TimesRun.txt
Run Code Online (Sandbox Code Playgroud)
这也可以安全地工作。
将 aSPACE放在重定向运算符的前面:
echo %Build% >>TimesRun.txt
Run Code Online (Sandbox Code Playgroud)
这也有效,但额外SPACE的包含在echo.
另请参阅这篇很棒的文章:cmd.exe 重定向操作符 order 和 position。
| 归档时间: |
|
| 查看次数: |
2581 次 |
| 最近记录: |