Board logo

标题: FOR循環與findstr怎么合并?? [打印本页]

作者: van416     时间: 2010-12-10 09:41    标题: FOR循環與findstr怎么合并??
今天在做FOR語句不知道該如何將for語句與findstr合并,以下為分開的程式,請幫忙看看,感謝~

需求:將project字段后的內容取出

2.ini
Hierarchy ID : Normal Board
Chip SKU : 250
Project : 1060-0011
CDP : N/A

1.bat
@echo off
DEL 1.txt
findstr "^Project" 2.ini>1.txt

2.bat
@echo off
setlocal
for /f "delims=: tokens=2" %%i in (1.txt) do (
set biosv=%%i
)
echo.%biosv% >bios.dat

endlocal

以上,想將1.bat與2.bat合并,該將1.bat如何加入到2.bat中呢?

作者: qinchun36     时间: 2010-12-10 10:19
可以使用这种样式的语句来处理结果并且避免中间文件的产生:

FOR /F %x IN ('有文字输出的命令行') DO ***

那个命令行用单引号包起来,顺便说一句,delims最好写在最后。

for /f "tokens=2 delims=: " %%i in ('findstr "^Project" 2.ini') do

作者: van416     时间: 2010-12-10 10:38
感謝~~ 已經解決了~~~

作者: yf6122010     时间: 2010-12-10 11:15
学习了。。

作者: a081910     时间: 2010-12-10 15:11
学习一下!谢谢

作者: van416     时间: 2010-12-10 16:11
我有DOS下沒有findstr這個命令,用WINXP下的又不能用,用這個工具的能不能上偉一下給我

作者: Hanyeguxing     时间: 2010-12-10 16:27
这样不可以吗?
@echo off&setlocal enabledelayedexpansion
for /f "tokens=1* delims=:" %%i in (1.ini) do (
set i=%%i
if /i "!i:~0,7!"=="Project" >>bios.dat echo %%j
)

作者: van416     时间: 2010-12-10 17:02
for /f "tokens=1* delims=:" %%i in (1.ini) do (
set i=%%i
if /i "!i:~0,7!"=="Project" >>bios.dat echo %%j

有幾句看不太明白

tokens=1* 是什么意思?

if /i "!i:~0,7!"=="Project" >>bios.dat echo %%j
這一句也不明白,if /i 0,7是什么意思呢?

作者: Hanyeguxing     时间: 2010-12-10 17:26
俺没用dos,所以不清楚这样的语法在dos下支持不,如果支持的,搂主在研究他什么意思。。。

作者: van416     时间: 2010-12-10 17:30
嗯 ,好的,謝謝,可以用的

現在不明白的是 if /i "!i:~0,7!"=="Project" 其中!i:~0,7是什么意思呢?

作者: Hanyeguxing     时间: 2010-12-10 17:38
if /i "!i:~0,7!"=="Project"
/i忽略大小写
!i:~0,7!截取变量的第一字符开始,共7个字符
!是%在变量延迟时的写法

作者: van416     时间: 2010-12-10 18:12
謝謝。。明白了

還有一個問題:for命令在純MS-DOS下好像不支持for /f語句,請問這個for命令可以下載嗎?

作者: Hanyeguxing     时间: 2010-12-10 18:24
for 是个内部命令。。。

作者: van416     时间: 2010-12-10 18:31
怎么更新DOS下FOR命令呢? 我好像找不到呢?

作者: Hanyeguxing     时间: 2010-12-10 19:32
@echo off
find /i "Project" 2.ini>han_1.txt
more +2 han_1.txt>han_2.txt
set/p k=<han_2.txt
set k=%k:*:=%
del /q han_*
echo %k:~1% >bios.dat


Last edited by Hanyeguxing on 2010-12-10 at 19:37 ]

作者: van416     时间: 2010-12-10 19:47
真是太感謝你了~~~
我差點沒信心了,還要你幫忙解釋一下
more +2 han_1.txt>han_2.txt 是什么意思呢?
當程式執行到這個命令的時候han_2.txt里面沒有內容~
set/p k=<han_2.txt
set k=%k:*:=%
又是什么意思呢?
echo %k:~1% >bios.dat
這個又是什么意思呢?

能不能再教一下呢? 跪謝~

Last edited by van416 on 2010-12-10 at 19:49 ]

作者: van416     时间: 2010-12-10 20:22
还请大哥再帮忙看一下,感谢

作者: van416     时间: 2010-12-12 12:02
查看了很多網站,發現MS-DOS7.0下不支持 more +2 han_1.txt>han_2.txt

請問還有什么方法可以將目標保存下來呢?感謝~~

作者: 726842270     时间: 2010-12-12 12:12
不知道下个工具包能否有用。

作者: van416     时间: 2010-12-12 12:18
sed工具可以用嗎?

作者: 726842270     时间: 2010-12-12 12:21
说实话DOS还真不知道,如果工具包中有,当然可以用,SED在CMD下也是个外部命令,还是需要下载的

作者: van416     时间: 2010-12-12 12:22
我剛下載了一個,可惜不知道怎么用,

作者: 726842270     时间: 2010-12-12 12:26
作者: van416     时间: 2010-12-12 12:30
太感謝你了,我先看看

作者: van416     时间: 2010-12-12 12:34
用sed -n "/Project/p" 1.ini > han_1.txt 已經可以將project中的一行保存進han_1.txt中了

han_1.txt內容:
Project : 1060-0011
下一步只將han_1.txt中的:后面的字符1060-0011顯示出來?

作者: van416     时间: 2010-12-12 18:14
sed -n "/^Sign/p" bios.ini >han_1.txt
sed "s/Sign-On Message : //" han_1.txt > bios.dat

感謝726842270與Hanyeguxing!用以上兩行可以解決這個問題