国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
關(guān)于批處理的學(xué)習(xí)

8 番外篇

 

標(biāo)題很奇怪?其實(shí),您可以把它當(dāng)作一期OVA。

8.1 批量十六進(jìn)制二進(jìn)制格式轉(zhuǎn)換

想把數(shù)據(jù)(流)以十六進(jìn)制或二進(jìn)制的形式顯示出來?UltraEdit之類的編輯軟件一定是首選。即使是要自己親自轉(zhuǎn)出來,C/C++等語(yǔ)言也會(huì)方便的多。如果您跟我一樣選擇使用批處理來實(shí)現(xiàn)的話,那么很好,很有挑戰(zhàn)性。

::::::DataFormatConvert.bat:::::
@echo off

:Initialization
set TempFile=temp.tmp
set /a num = 0
set BinaryFormat=Bin
:: 默認(rèn)為二進(jìn)制數(shù)字0或1顯示
set ConvertOption=ConvertToHex
:: 默認(rèn)為十六進(jìn)制轉(zhuǎn)換
set ShowProgress=ShowProgressOn
:: 默認(rèn)為顯示轉(zhuǎn)換進(jìn)度

set BackSpace=[將本文底部評(píng)論3中的退格符替換到此處]
:: 退格符

set Source=z%1
:: 添加一個(gè)臨時(shí)字符 z
if %Source:~1,1%z%Source:~-1%=="z" set Source=z%Source:~2,-1%
:: 檢查變量參數(shù)1的第一個(gè)和最后一個(gè)字符是否為 "" ,是的話就去掉
set Source=%Source:~1%
:: 去掉臨時(shí)字符 z
if "%Source%"=="" goto :HelpInformation
if "%Source%"=="/?" goto :HelpInformation
if /i "%Source%"=="/help" goto :HelpInformation
if not exist "%Source%" echo 目標(biāo)文件不存在 & exit /b 2
:: 檢查參數(shù)1 [注1]

if /i "%2"=="/Bin"         set ConvertOption=ConvertToBin
if /i "%3"=="/Bin"         set ConvertOption=ConvertToBin
if /i "%2"=="/Block"       set ConvertOption=ConvertToBin & set BinaryFormat=BinBlock
if /i "%3"=="/Block"       set ConvertOption=ConvertToBin & set BinaryFormat=BinBlock
if /i "%2"=="/ProgressOff" set ShowProgress=ShowProgressOff
if /i "%3"=="/ProgressOff" set ShowProgress=ShowProgressOff
:: 檢查參數(shù)2和3 [注2]

for %%i in ("%Source%") do (
    set SourceDrivePathName=%%~dpni
    set FileSize=%%~zi
)
:: 獲得源文件的 驅(qū)動(dòng)器號(hào)+路徑+標(biāo)題名 ,以及文件大小。 d - drive, p - path, n - name, z - size
if "%FileSize%"=="0" echo 目標(biāo)文件為空 & exit /b 3
del %TempFile% >nul 2>nul
fsutil file createnew %TempFile% %FileSize% >nul
:: 創(chuàng)建一個(gè)大小與源文件一樣的空白文件,該文件里的所有字節(jié)均為0x00

goto :%ConvertOption%

:ConvertToHex
:: 十六進(jìn)制轉(zhuǎn)換

setlocal EnableDelayedExpansion
set OutputFile="%SourceDrivePathName%.Hex.txt"
echo 文件 %Source% 的十六進(jìn)制格式:>%OutputFile%
echo. & echo 正在轉(zhuǎn)換為十六進(jìn)制...

for /f "skip=1 tokens=1,3" %%i in ('fc /b %TempFile% "%Source%"') do (
    set index=0x%%i
    set index=!index:~0,-1!
    set /a offset = !index! - !num!

    for /l %%n in (1,1,!offset!) do (
        set /p=00<nul>>%OutputFile%
        set /a num += 1
    )
    set /p=%%j<nul>>%OutputFile%
    set /a num += 1
    call :%ShowProgress% !num!
)
:: 通過與大小相同內(nèi)容空白的文件進(jìn)行二進(jìn)制對(duì)比,獲得源文件的十六進(jìn)制碼 [注3]
endlocal
goto :ExitSuccess

:ConvertToBin
setlocal EnableDelayedExpansion
set
OutputFile="%SourceDrivePathName%.%BinaryFormat%.txt"
echo 文件 %Source% 的二進(jìn)制格式:>%OutputFile%
echo. & echo 正在轉(zhuǎn)換為二進(jìn)制...

for /f "skip=1 tokens=1,3" %%i in ('fc /b %TempFile% "%Source%"') do (
    set index=0x%%i
    set index=!index:~0,-1!
    set /a offset = !index! - !num!

    for /l %%n in (1,1,!offset!) do (
        call :HexTo%BinaryFormat% 0
        call :HexTo%BinaryFormat% 0
        set /a num += 1
    )
    set HexData=%%j
    call :HexTo%BinaryFormat% !HexData:~0,1!
    call :HexTo%BinaryFormat% !HexData:~1,1!
    set /a num += 1
    call :%ShowProgress% !num!
)
endlocal
goto :ExitSuccess

:HexToBin
:: 函數(shù): HexToBin 用途: 以0或1的形式顯示

if %1==0 set /p=0000<nul>>%OutputFile%
if %1==1 set /p=0001<nul>>%OutputFile%
if %1==2 set /p=0010<nul>>%OutputFile%
if %1==3 set /p=0011<nul>>%OutputFile%
if %1==4 set /p=0100<nul>>%OutputFile%
if %1==5 set /p=0101<nul>>%OutputFile%
if %1==6 set /p=0110<nul>>%OutputFile%
if %1==7 set /p=0111<nul>>%OutputFile%
if %1==8 set /p=1000<nul>>%OutputFile%
if %1==9 set /p=1001<nul>>%OutputFile%
if %1==A set /p=1010<nul>>%OutputFile%
if %1==B set /p=1011<nul>>%OutputFile%
if %1==C set /p=1100<nul>>%OutputFile%
if %1==D set /p=1101<nul>>%OutputFile%
if %1==E set /p=1110<nul>>%OutputFile%
if %1==F set /p=1111<nul>>%OutputFile%
goto :EOF

:HexToBinBlock
:: 函數(shù): HexToBinBlock 用途: 以 或■的形式顯示[注3]
if %1==0 set /p=    <nul>>%OutputFile%
if %1==1 set /p=   ■<nul>>%OutputFile%
if %1==2 set /p=  ■ <nul>>%OutputFile%
if %1==3 set /p=  ■■<nul>>%OutputFile%
if %1==4 set /p= ■  <nul>>%OutputFile%
if %1==5 set /p= ■ ■<nul>>%OutputFile%
if %1==6 set /p= ■■ <nul>>%OutputFile%
if %1==7 set /p= ■■■<nul>>%OutputFile%
if %1==8 set /p=■   <nul>>%OutputFile%
if %1==9 set /p=■  ■<nul>>%OutputFile%
if %1==A set /p=■ ■ <nul>>%OutputFile%
if %1==B set /p=■ ■■<nul>>%OutputFile%
if %1==C set /p=■■  <nul>>%OutputFile%
if %1==D set /p=■■ ■<nul>>%OutputFile%
if %1==E set /p=■■■ <nul>>%OutputFile%
if %1==F set /p=■■■■<nul>>%OutputFile%
goto :EOF

:ShowProgressOn
:: 函數(shù): ShowProgressOn 用途: 顯示轉(zhuǎn)換進(jìn)度
set /a mod = %1 %% 50
if %mod% equ 0 (
    set /a percent = %1 * 100 / %FileSize%
    set /p=%BackSpace%%BackSpace%%BackSpace%<nul
    set /p=!percent!%%<nul
)
goto :EOF

:ShowProgressOff
:: 函數(shù): ShowProgressOff 用途: 不顯示轉(zhuǎn)換進(jìn)度
goto :EOF

:HelpInformation
:: 該批處理的幫助信息
echo 將文件轉(zhuǎn)換為十六進(jìn)制或二進(jìn)制的格式。
echo.
echo DataFormatConvert source [/Hex ^| /Bin ^| /Block] [/ProgressOn ^| /ProgressOff]
echo.
echo   source       指定要轉(zhuǎn)換的文件。
echo   /Hex         表示轉(zhuǎn)換為十六進(jìn)制格式(默認(rèn))。
echo   /Bin         表示轉(zhuǎn)換為二進(jìn)制格式。
echo   /Block       表示轉(zhuǎn)換為二進(jìn)制格式并以方塊的形式顯示。
echo   /ProgressOn 顯示轉(zhuǎn)換進(jìn)度(默認(rèn))。
echo   /ProgressOff 關(guān)閉顯示進(jìn)度。
exit /b 1

:ExitSuccess
:: 成功完成并退出
del %TempFile% >nul
set /p=%BackSpace%%BackSpace%%BackSpace%%BackSpace%<nul
echo 轉(zhuǎn)換完成!
exit /b 0
::::::::::::::::::::::::::::::::

注1 exit 的參數(shù) /b ,可以退出當(dāng)前批處理腳本而不退出調(diào)用它的 CMD.EXE。如果從一個(gè)批處理腳本外執(zhí)行,則會(huì)退出 CMD.EXE 。exit 的第二個(gè)參數(shù) exitCode 是一個(gè)數(shù)字號(hào)碼,如果使用了參數(shù) /b ,這個(gè)數(shù)字號(hào)碼將成為該批處理退出的 ErrorLevel 。如果退出 CMD.EXE ,則用那個(gè)數(shù)字設(shè)置過程退出代碼。

注2 看到該批處理這些可使用的參數(shù),您可能已經(jīng)發(fā)現(xiàn)了,該批處理可以作為一條外部命令來使用,如果您把它放到 %SystemRoot%\system32 或 %SystemRoot% 路徑下的話。默認(rèn)情況下,%SystemRoot%\system32 和 %SystemRoot% 都是環(huán)境變量 PATH 的值之一(在 我的電腦->屬性->高級(jí)->環(huán)境變量 中可以查看并設(shè)置相關(guān)環(huán)境變量)。

注3 源文件通過與其大小相同內(nèi)容全為0x00的文件進(jìn)行對(duì)比后,可以將源文件中所有與0x00不同的字節(jié)內(nèi)容以十六進(jìn)制碼的形式表達(dá)出來。同時(shí),還能得到每個(gè)不同字節(jié)所在的字節(jié)數(shù)位置,通過這個(gè)也便確定了源文件中0x00的內(nèi)容。

正如注2中所說的,如果該批處理被放到了環(huán)境變量 PATH 中的路徑中,則它可以作為外部命令來為您工作。


圖8-1 DataFormatConvert 的執(zhí)行示意

十六進(jìn)制或二進(jìn)制轉(zhuǎn)換成功的文件將被寫到與源文件相同的路徑中。

 


圖8-2 經(jīng)DataFormatConvert 十六進(jìn)制轉(zhuǎn)換后的文件

對(duì)于計(jì)算機(jī)而言,十六進(jìn)制碼(或者說0和1)才能表達(dá)出它們自己的想法,盡管這些對(duì)我們來說猶如天書一般。[創(chuàng)作日期:2008-05-17]

========================================樸實(shí)的分割線========================================

8.2 別擠,自啟動(dòng)的排隊(duì)來

被放入到自啟動(dòng)項(xiàng)里的程序,從某種意義上來說,在被開啟的時(shí)候確實(shí)簡(jiǎn)化了用戶的操作。然而,在開機(jī)后眾多的程序就像春運(yùn)時(shí)期擠火車一樣的蜂擁而上,這并不是我們所期望的。請(qǐng)不要問我為什么給這個(gè)批處理起了個(gè)如此無(wú)理的名稱,所有放在 C:\WINDOWS 下的批處理我都會(huì)以小寫字母 z 打頭,方便管理。

::::::::::zLauncher.bat:::::::::
@echo off
setlocal enabledelayedexpansion
title Launching...
set /a ShortDelay = 6
set BackSpace=[將本文底部評(píng)論3中的退格符替換到此處]

set /p choice=LaunchOptions:
if not "%choice%"=="" goto :CustomLaunch

:BasicLaunch
call :LaunchItem1
call :LaunchItem2
call :LaunchItem3
call :LaunchItem4
call :LaunchItem5
goto :EOF

:CustomLaunch
for /l %%i in (0 1 9) do (
    set "choice_=!choice:~%%i,1!"
    if "!choice_!"=="" echo All Launched! & goto :EOF
    if !choice_! gtr 9 echo Unknown Define & goto :EOF
    if !choice_! lss 0 echo Unknown Define & goto :EOF
    call :LaunchItem!choice_!
)

:LaunchItem1
start "OE"           "C:\Program Files\Outlook Express\msimn.exe"
call :IsItemLaunchedSuccessful OE
goto :EOF
:LaunchItem2
start "Skype"        "D:\Program Files\Skype\Phone\Skype.exe" /nosplash /minimized
call :IsItemLaunchedSuccessful Skype
goto :EOF
:LaunchItem3
Start "QQ"           "D:\Program Files\Tencent\QQ\QQ.exe"
call :IsItemLaunchedSuccessful QQ
goto :EOF
:LaunchItem4
start "BaiduHi" /min "D:\Program Files\baidu\Baidu Hi\BaiduHi.exe"
call :IsItemLaunchedSuccessful BaiduHi
goto :EOF
:LaunchItem5
start "Thunder" /min "D:\Program Files\Thunder Network\Thunder\Thunder.exe"
call :IsItemLaunchedSuccessful Thunder
goto :EOF
:LaunchItem6
start "Tudou"   /min "D:\Program Files\Tudou\iTudou\iTudou.exe"
call :IsItemLaunchedSuccessful Tudou
goto :EOF
:LaunchItem7
start "MSN"     /min "C:\Program Files\MSN Messenger\msnmsgr.exe"
call :IsItemLaunchedSuccessful MSN
goto :EOF

:IsItemLaunchedSuccessful
set /p =Launching %1<nul & title Launching %1
if ERRORLEVEL 0 (
    for /l %%i in (1,1,4) do (
        ping -n %ShortDelay% 127.1>nul
        set /p =.<nul
    )
)
for /l %%i in (1,1,32) do set /p =%BackSpace%<nul
echo %1 Launched     
title %1 Launched
ping -n %ShortDelay% 127.1>nul
goto :EOF

::::::::::::::::::::::::::::::::

看得出來,這是一個(gè)科技含量很低的批處理,僅僅是在 start 每個(gè)程序之間將其掛起一段時(shí)間來避免眾多程序同時(shí)啟動(dòng)所帶來的負(fù)荷。當(dāng)然,為了使它能夠發(fā)揮作用,您得親自配置它所要啟動(dòng)的程序,以及程序所在的路徑才行。[創(chuàng)作日期:2008-08-14]

參考:
[1] [原創(chuàng)]CMD批處理獲取文件的ASCII碼 中國(guó)DOS聯(lián)盟
[2] 點(diǎn)陣漢字顯示 CSDN博客
[3] Fsutil 百度百科

目錄:
批處理的學(xué)習(xí)之一[前言]
批處理的學(xué)習(xí)之二[顯示篇]
批處理的學(xué)習(xí)之三[賦值 調(diào)用 參數(shù)]
批處理的學(xué)習(xí)之四[條件 循環(huán)]
批處理的學(xué)習(xí)之五[組合命令 管道命令]
批處理的學(xué)習(xí)之六[常用實(shí)例 上]
批處理的學(xué)習(xí)之七[常用實(shí)例 下]
批處理的學(xué)習(xí)之八[番外篇]

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
無(wú)聊用批處理弄個(gè)隨機(jī)數(shù)生成器——給小G
用批處理對(duì)文件批量重命名
建立個(gè)O盤,隱藏你的好東東
批處理 Set 命令詳解 讓你理解set命令
全球第二發(fā),無(wú)憂最完美的、真正單文件的PETOOLS掛載工具CMD(0725最后更新)
用手機(jī)當(dāng)遙控:OE收件箱監(jiān)控與主題提取工具【原創(chuàng)批處理】
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服