Hi 大家好 這是我第一次發問 有任何問題還請見諒 謝謝
想詢問一下 以下程式碼中
for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do (
set "DEL=%%a"
)
這段是如何運作的呢?
prompt 不太清楚是拿來做甚麼的..
DEL 裡面存了甚麼, Echo出來是空的...
<nul set /p ".=%DEL%" > "%~2"
findstr /v /a:%1 /R "^$" "%~2" nul
del "%~2" > nul 2>&1
這段還在理解中
以下為完整程式碼
@echo off
SETLOCAL EnableDelayedExpansion
for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do (
set "DEL=%%a"
)
rem echo say the name of the colors, don't read
:start
rem cls
call :ColorText 0a "blue"
call :ColorText 0C "green"
call :ColorText 0b "red"
echo.
call :ColorText 19 "yellow"
call :ColorText 2F "black"
call :ColorText 4e "white"
echo.
echo aaaaaa
pause
goto :eof
:ColorText
echo off
<nul set /p ".=%DEL%" > "%~2"
findstr /v /a:%1 /R "^$" "%~2" nul
del "%~2" > nul 2>&1
goto :eof
太感謝nwm310了~!!
講解得非常詳細!!
看到你的解說 想在問個問題~
解說中 有多次提到取得16進位去分辨變數內容 是如何做到的阿~!
也可以提供搜尋關鍵字 因為我不知道該怎麼搜尋... 謝謝!!
(無法直接在下面回應..只能打在這QQ)
@echo off
for /f "delims=" %%a in ('"echo hi"') do echo %%a
hi
@echo off
for /f "delims=" %%a in ('"for %%b in (1) do echo hi"') do echo %%a
R:\>echo hi
hi
@echo off
for /f "delims=" %%a in ('"rem"') do echo %%a
沒有印出東西
@echo off
for /f "delims=" %%a in ('"for %%b in (1) do rem"') do echo %%a
R:\>rem
@echo off
for /f "delims=" %%a in ('"prompt $H & for %%b in (1) do rem"') do >out.txt echo %%a
prompt $H 用來改變命令提示字元為 後退 (清除前一個字元)
可以打 prompt /? 查詢
把%%a存到out.txt
16進位內容為: 08 20 08 20 72 65 6D 0D 0A
08 20 08 是 命令提示字元
20 是 空格
72 65 6D 是 rem
0D 0A 是 echo 命令產生的換行符號
@echo off
for /f "delims=" %%a in ('"prompt $H# & for %%b in (1) do rem"') do >out.txt echo %%a
把%%a存到out.txt
16進位內容為: 08 20 08 23 20 72 65 6D 0D 0A
08 20 08 的後面多出一個 23 (也就是#)
@echo off
for /f "delims=#" %%a in ('"prompt $H# & for %%b in (1) do rem"') do >out.txt echo %%a
把%%a存到out.txt
16進位內容為: 08 20 08 0D 0A
@echo off
for /f "delims=#" %%a in ('"prompt $H# & for %%b in (1) do rem"') do set "DEL=%%a"
DEL變數 16進位內容為: 08 20 08
不切割字串。把完整內容設值給 %%a
用 # 切割字串。把第一段字串設值給 %%a
雙引號是為了 特殊符號 & ( )
不使用雙引號、而使用 ^ 的寫法
for /f "delims=#" %%a in ('prompt $H# ^& for %%b in ^(1^) do rem') do set "DEL=%%a"
<nul set /p ".=%DEL%" > "%~2"
把%DEL%的內容,存到檔名為"%~2"的檔案裡
如果用echo來存
> "%~2" echo %DEL%
除了%DEL%本身的內容,還會多了 0D 0A (換行符號)
R:\>findstr "." a.txt
111
兩個檔名時,才會顯示檔名
R:\>findstr "." a.txt a.txt
a.txt:111
a.txt:111
R:\>findstr "." a.txt a.txt
a.txt:111a.txt:111
nul也是一種檔名
R:\>findstr "." a.txt nul
a.txt:111
/a:2F 使a.txt: 有顏色
color /? 可以查詢顏色代碼
R:\>findstr /a:2F "." a.txt nul
a.txt:111
當a.txt的 16進位內容是 08 20 08
刪除冒號
R:\>findstr /a:2F "." a.txt nul
a.txt
cmd - Code for changing colors in batch : How is it working? - Stack Overflow