iT邦幫忙

0

請教關於DOS FOR運用

請教版上大大,下面的指令
REG Query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" | find "ProductName"
結果
ProductName REG_SZ Windows 7 Professional

如果我想用批次檔,用For迴圈把Windows 7 Professional這串字放到一個變數中要怎麼寫?

2 個回答

6
蟹老闆
iT邦大師 1 級 ‧ 2014-10-31 01:06:11
最佳解答
<pre class="c" name="code">
for /f "EOL=. delims=SZ  tokens=2 skip=2" %i in ('REG Query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /f "ProductName"') do echo %i

這個前面空格無法去除殘念

<pre class="c" name="code">
for /f "delims== tokens=2 skip=1" %i in ('wmic os get Caption /value') do echo %i

這個效果比較好前面不會有空格

wayne988 iT邦新手 5 級 ‧ 2014-11-07 13:09:32 檢舉

我使用在Win XP / WIN7 / WIn8

<pre class="c" name="code">for /f "delims== tokens=2 skip=1" %%i in ('wmic os get Caption /value') do echo %%i 

結果最前面都會少一個M
icrosoft Windows XP Professional
不知是哪邊錯了....>_<

蟹老闆 iT邦大師 1 級 ‧ 2014-11-10 17:24:25 檢舉

wayne988提到:
結果最前面都會少一個M

ECHO 看得到M出來的結果卻沒有!!
那只好在ECHO 加上.讓它前面多顯示一個NUL來避開M不見的情形
如果是用 SET 的話會有M

ECHO. %%i

蟹老闆 iT邦大師 1 級 ‧ 2014-11-10 17:46:44 檢舉

wayne988提到:
不知是哪邊錯了....>_<

將COPY到批次檔 ECHO %%i 後方的空白去除也可以正常顯示,原因不明!!

10
海綿寶寶
iT邦大神 1 級 ‧ 2014-10-30 20:45:57

試試看

&lt;pre class="c" name="code">
for /f "delims=" %%F in ('REG Query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" ^| find "ProductName"') do set osname=%%F
echo %osname:~29%
看更多先前的回應...收起先前的回應...
wayne988 iT邦新手 5 級 ‧ 2014-10-31 09:32:25 檢舉

謝謝大大回覆,這個執行結果似乎還是把所有值都抓出來了...@_@

我執行的結果如下
最後 echo 出來的不是你要的答案嗎
疑惑

&lt;pre class="c" name="code">
C:\Users\HomeAcer>for /F "delims=" %F in ('REG Query "HKEY_LOCAL_MACHINE\SOFTWAR
E\Microsoft\Windows NT\CurrentVersion" | find "ProductName"') do set osname=%F


C:\Users\HomeAcer>set osname=    ProductName    REG_SZ    Windows 7 Home Premium


C:\Users\HomeAcer>echo Windows 7 Home Premium
Windows 7 Home Premium

C:\Users\HomeAcer>
蟹老闆 iT邦大師 1 級 ‧ 2014-10-31 12:41:35 檢舉

echo %osname:~29%

可能少了這個

wayne988 iT邦新手 5 級 ‧ 2014-11-07 13:00:15 檢舉

剛剛試了一下,當在Windows XP環境下

&lt;pre class="c" name="code">@echo off
for /f "delims=" %%F in ('REG Query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" ^| find "ProductName"') do set osname=%%F  
echo %osname:~29%  
echo on

跑出來的結果是
oft Windows XP

那個 %osname:~29% 的 29 表示「從第29個字開始切字串」
如果照你的 XP
就把原來的

&lt;pre class="c" name="code">%osname:~29%

改成

&lt;pre class="c" name="code">%osname:~23%

試試看囉

我要發表回答

立即登入回答