2010年1月17日

關於最近寫的幾個批次

批次檔是Windows底下的一個小程式,只需要利用記事本寫下幾個命令並存成*.bat(batch,批次)就可以運作。最近在工作上有些動作是在反覆重複,因此在命令提示字元底下觀察相關教學,直到今天寫出了幾個有趣的小程式。分別為:定時關機、複製資料夾結構與檔案列表。


定時關機
好吧,我承認我使用太多的GOTO,這樣的寫法也為我引來不少的問題,不過我覺得能夠動就不錯了:P這邊還使用了排程的功能,可以設定定時或是倒數來關機。

@echo off
:Menu
set jojo=%time%
echo 很高興為您服務,我是關機精靈:)
set /p Ser1="1)定時關機 2)重新開機 3)取消定時 4)開啟排程 5)關閉精靈 6)關於:"

if %Ser1%==3 goto StopX
if %Ser1%==4 start %SystemRoot%\Tasks

if %Ser1%==5 goto ExitX
if %Ser1%==6 goto AbouX
set /p time="請問幾秒後執行此服務(若需排程定時執行,請輸入 t):"
if %time%==t goto FixT
if %time% LSS 0 goto Wrong
if %Ser1%==1 goto ShutX
if %Ser1%==2 goto RestX

:AbouX
CLS
echo **************************************
echo *****      SHUTDOWN FAIRY        *****
echo *****       LI-FONG CHEN         *****
echo *****    January 10, 2010        *****
echo **************************************
pause
CLS
Goto Menu


:Wrong
CLS
echo (╯-_-)╯╧╧
echo 別玩我啊,大哥,重新想一想吧!
pause
Cls
Goto Menu

:FixT
echo 現在為%jojo%
set /p hhss="請輸入時間(HH:MM)以執行程式:"
if %Ser1%==1 at %hhss% shutdown -s
if %Ser1%==2 at %hhss% shutdown -r
CLS
if %Ser1%==1 echo 現在為%jojo%,預計於%hhss%進行關機。
if %Ser1%==2 echo 預計於%hhss%進行排程重開,屆時會有30秒供您取消命令。
echo 您若想取消排程,請選擇 2)開啟排程,並手動刪除at1, at2...檔案,
Goto ReMenu

:ReMenu
set /p Ser2="命令執行中,請問接下來要:1)取消定時 2)開啟排程 3)關閉精靈:"
if %Ser2%==1 goto StopX
if %Ser2%==2 start %SystemRoot%\Tasks
if %Ser2%==3 goto ExitX
CLS
Goto Menu

:ShutX
shutdown -s -t %time%
echo 命令執行中
CLS
Goto ReMenu

:RestX
shutdown -r -t %time%
CLS
Goto ReMenu

:StopX
shutdown -a
pause
CLS
Goto Menu

:ExitX
End


複製資料夾結構

如果你有需求要複製一模一樣的資料夾結構,例如從C槽底下複製3個資料夾與底下的子資料夾到D槽,卻不要複製到裡頭存放的檔案,那麼可以參考使用ROBOCOPY這個指令,其中的關鍵在於 /NOCOPY以避免複製檔案,而/E可以複製子資料夾。

@echo off
:Menu
set /p First="本程式將幫您複製資料夾結構但不包含檔案,請問是否執行?(y/n)
if %First%==n goto Exit
set /p From="來源資料夾路徑:"
set /p To="目標資料夾路徑:"
set /p Ans="本程式將幫您複製%From%資料夾結構到%To%,是否執行?(y/n)"
if %ans%==n goto Menu
robocopy %From% %To% /nocopy /E
set /p Rea="本程式已經執行結束,是否有下一任務?(y/n)"
CLS
if %Rea%==y goto Menu
:Exit
End


製作檔案列表
純粹想要知道資料夾底下有哪些檔案,如同DIR的功能一般,只不過順便存成記錄檔。
@echo off
:Menu
echo 很高興為您服務,我將為您製作指定資料夾的檔案列表
set To=C:\
set /p From="來源資料夾路徑:"
set /p To="檔案列表儲存於(預設為C槽,如不需更改請按Enter):"
set /p Name="列表檔名:"
set /p Ans="將幫您製作%From%的檔案列表%Name%.txt至%To%,是否執行?(y/n)"
if %ans%==n goto Menu
DIR %From% /S /B >>%To%\%Name%.txt
set /p Rea="本程式已經執行結束,是否有下一任務?(y/n)"
CLS
if %Rea%==y goto Menu
:Exit
End

為什麼要公布原始碼,那是因為我這些資料取決於網路上,而我所得到的成果你也可以在網路尋找到。如果你認為很有用,甚至覺得改一改會變得更加有趣,希望你可以讓我知道來學習。畢竟我只是一個以電腦為興趣的人,有機會可以得到更多資訊會對我很有幫助。

沒有留言: