1. 程式人生 > >常用DOS批處理命令

常用DOS批處理命令

接收鍵盤輸入字串的程式


:: Get user input - includes error check
@echo off
echo e102'set %%1='> %temp%./t1.dat
for %%? in (w q) do echo %%?>> %temp%./t1.dat
:input
echo.
echo Type input:
FC con nul /lb1 /n |FIND "1:" > %temp%./t2.bat
:: Error checking begins here
FIND "|" %temp%./t2.bat > nul
if not errorlevel=1 goto error
FIND "=" %temp%./t2.bat > nul
if not errorlevel=1 goto error
FIND " nul
if not errorlevel=1 goto error
FIND ">" %temp%./t2.bat > nul
if not errorlevel=1 goto error
:: Error checking end
DEBUG %temp%./t2.bat  nul
call %temp%./t2.bat 字串
for %%? in (t1.dat t2.bat) do del %temp%./%%?
echo 字串=%字串%
goto eof
:error
echo.
echo @PROMPT Invalid input. Invalid characters: $Q $L $G $B$_> %temp%./t2.bat
%comspec% /c %temp%./t2.bat |FIND ":"
goto input
:eof


一個修改檔案的更新日期的程式


@echo off
rem 儲存系統時間
echo.|date>sysdate.bat
echo.|time>systime.bat
rem 修改系統時間為指定時間,日期為引數一,時間為引數二,檔名為引數三
date %1
time %2
rem 修改檔案的時間
copy %3+,,>nul
rem 恢復系統時間
echo date %%4>current.bat
call sysdate
echo time %%3>current.bat
call systime
rem 程式執行完畢
echo Success.
del systime.bat
del sysdate.bat
del current.bat
echo on 


PING某個區段內的所有IP的程式

  在命令列輸入 a.bat 0 1 2 3 4 5 6 7 8 9 ,就能顯示某區段的所有 IP 地址 192.168.1.0 - 192.168.1.99 ,將其中的 echo 改成 ping 就行,其中的 choice 和 if 語句是等待使用者判斷是否繼續,可以刪除,但這樣中斷程式比較麻煩。
CODE:  [Copy to clipboard]
--------------------------------------------------------------------------------

@echo off
:redo
if "%1" == "" goto end
for %%a in (0,1,2,3,4,5,6,7,8,9) do echo 192.168.1.%1%%a
choice continue
if errorlevel 2 goto end
shift
goto redo
:end


一個定時器程式


程式中的 CURRENT.BAT 可以更換為自己需要執行的內容。FIND 一句的時間可以根據自己的需要設定,也可用引數%1代替。還可以改為 TIME 改為 DATE 以完成的定期執行的功能。

------------------------------


  Quote:
::CURRENT.BAT
@echo off
echo Haha, it's the time to go!!

::TIMER.BAT
@echo off
:start
echo.|time|find "10:30:00">run.bat
choice /c:y /t:y,59 /n>nul
call run.bat
goto start 
 


ASCII彙編程式碼,延遲精度為0.001秒,適用平臺為MS-DOS/Win9x/WinNT。

  德國人Herbert Kleebauer給出了一個通用方案,通過ASCII彙編器間接產生一個sleep.exe程式來實現延遲,這個程式分為DOS和Win兩個模組,分別呼叫DOS系統中斷服務和WindowsAPI。
CODE:  [Copy to clipboard]
--------------------------------------------------------------------------------


時鐘(Clock)

1、暫停(Pause)、延遲(Delay)、等待(Wait)、睡眠(Sleep)

1)for+set+if,時間精度為0.01秒,適用平臺為WinNT/2K/XP/2003。

  利用for解析變數%time%並存為兩個時間點%start%和%now%,再利用set /a計算兩個時間點的時間差,最後用if判斷時間差是否達到設定的暫停時間。
CODE:  [Copy to clipboard]
--------------------------------------------------------------------------------

  @echo off
  setlocal enableextensions
  echo %time%
  call :ProcDelay 200
  echo %time%
  goto :EOF

  :ProcDelay delayMSec_
  setlocal enableextensions
  for /f "tokens=1-4 delims=:. " %%h in ("%time%") do set start_=%%h%%i%%j%%k
    :_procwaitloop
    for /f "tokens=1-4 delims=:. " %%h in ("%time%") do set now_=%%h%%i%%j%%k
    set /a diff_=%now_%-%start_%
  if %diff_% LSS %1 goto _procwaitloop
  endlocal & goto :EOF

如何刪除所有的空目錄?


用這個批處理就可以了。
dir /ad/b/s c:/ |sort /r >c:/kill.txt
For /f "tokens=*" %%i in (c:/kill.txt) DO rd "%%i"
del c:/kill.txt

我想用ECHO向另一P批處理檔案寫入“%~dp0”字元,可是被翻譯成路徑寫入了,而不是該字元本身,不知各位高手是否有辦法??
eg:
echo “%~dp0”>test.bat

試試:
echo "%%~dp0">test.bat
 檔名中的副檔名的判定
7.如何在批處理中判斷檔案字尾?實現諸如以下的效果。

if "%1" == "*.dll" goto dll
if "%1""=="*.inf" goto inf

1、如果檔名所指的檔案是單個檔案,且存在這個檔案,且其中不包含路徑的指定,那麼可以使用以下的方案
CODE:  [Copy to clipboard]
--------------------------------------------------------------------------------

for %%x in (*.dll) do if exist "%1" goto dll
for %%x in (*.inf) do if exist "%1" goto inf

2、如果檔名所指的檔案是單個檔案,但是它不存在,且其中不包含路徑的指定,那麼可以使用以下的方案
CODE:  [Copy to clipboard]
--------------------------------------------------------------------------------

if not exist %temp%/_getext_/nul md %temp%/_getext_
echo _getext_> %temp%/_getext_/%1
if exist %temp%/_getext_/*.dll goto dll
if exist %temp%/_getext_/*.inf goto inf

3、如果程式應用環境是NT系列的命令列,且檔名中只有一個分隔主檔名和副檔名的句點,可以使用以下的方案
CODE:  [Copy to clipboard]
--------------------------------------------------------------------------------

for /f "delims=. tokens=2" %%x in ("%1") do set _ext=%%x
if "%_ext%"=="dll" goto dll
if "%_ext%"=="inf" goto dll


目錄的存在判定

這似乎是個很簡單的問題,在我見過的和我編過的絕大部分批處理中,目錄判定都使用的是這個經典格式:

      if exist directory/nul command argument(s)

      可以說,這個技巧的創始者確實對DOS的研究十分深刻,至少他發現了 nul 所代表的裝置管理機制與檔案管理機制之間複雜而微妙的關係,nul裝置與. 和 .. 等一樣可以在大部分路徑下直接引用而不會產生系統錯誤。

      但是,也正像 .. 不能在根目錄下引用(這在NT CMD中被修改了)一樣,nul也有它的侷限性。

      當我們在 MSDOS7.10 的環境中載入了 DOSLFN 以實現長檔名支援時, DOSLFN 的某些 BUG 會將 /NUL 的引用轉義,此時會將檔案判定為目錄。


  Quote:
C:/>echo.>test.txt

C:/>if exist test.txt/nul echo Exist dir "test.txt"
Exist dir "test.txt"

C:/>
 


如果說這僅僅是doslfn的問題,那麼我們可以禁止DOSLFN,然後再將測試陣地轉到光碟上。由於光碟具有獨特的檔案系統CDFS,/NUL的引用失效了,目錄仍然無法被識別出來,不過總算不會把檔案誤判作目錄了。


  Quote:
E:/>dir /ad /b
BOOT
DOS71

E:/>if exist boot/nul echo Exist dir "BOOT"

E:/>
 


我們再轉到時新的[email protected]中,如果目錄名中包含空格,則無法用長檔名識別其存在。


  Quote:
C:/>md "my test"

C:/>if not exist "my test"/nul echo Not exist "my test"
Not exist "my test"

C:/>if not exist "my test/nul" echo Not exist "my test"
Not exist "my test"

C:/>
 
關於目錄的存在判定

用 if exist directory/nul command argument(s)
的方法只要目錄含有空格無論如何是匹配不正確的。
我實際應用中一般用下面的方法:
CODE:  [Copy to clipboard]
--------------------------------------------------------------------------------

md "my test"
cd "my test" &&echo Exist directory "test"
這樣會很準確,但也是有缺點的,那就是會進入其目錄


引用環境變數中路徑時的防禦字元的選擇


  Quote:
  另一個與此相關的問題是,路徑變數後的防禦字元。

  當我們使用環境變數引用一個路徑時,一般是直接引用,比如:

  %temp%/_temp.bat

  但這樣存在一個問題:如果%temp%是某個驅動器的根目錄,比如C:/,那麼以上的引用就變成了:
  
  C://_temp.bat

  路徑中出現了雙斜線,這在MS-DOS和Win9x中將會引起語法錯誤,所以有人採用了在變數後加一個句點的做法,即:

  %temp%./_temp.bat

  這樣的話,如果%temp%為根目錄,引用結果就是:C:/./_temp.bat,如果不是根目錄(比如C:/temp),就是C:/temp./_temp.bat。

  這利用了句點在不同用法中所呈現出的二義性:在前一用法中,它表示當前目錄,而根目錄下的當前目錄自然仍然是根目錄;而在後一用法中,它表示目錄名中主名與副檔名的分隔符,因為句點後沒有實際的副檔名,所以C:/temp.仍然表示的是C:/temp目錄。

  但是,這帶來了一個新問題:如果路徑中出現了相對路徑的特殊引用符,該怎麼辦?比如,如果%temp%是表示當前目錄的 . 或者上一級目錄的 ..,那麼 %temp%./_temp.bat 的引用就變成了:

  ../_temp.bat 或者 .../_temp.bat

  這顯然又不是我們所需要的結果,那麼我們該怎麼辦呢?

  答案在你們的手裡 :-)

相關推薦

常用DOS處理命令

接收鍵盤輸入字串的程式 :: Get user input - includes error check@echo offecho e102'set %%1='> %temp%./t1.datfor %%? in (w q) do echo %%?>> %t

DOS 處理命令For迴圈命令詳解

轉載:https://www.jb51.net/article/93171.htm for命令是一種對一系列物件依次迴圈執行同一個或多個命令的在命令列或批處理中執行的命令,結合一些Windows管理中的程式後,其處理功能強大、應用靈活方便程度令人刮目相看。但是,其幫助資訊也因此複雜往往令初學者望

Dos處理命令bat檔案執行完以後自動關閉dos視窗的方法

Dos 批處理命令 bat Dos 批處理命令 bat 檔案執行完以後自動關閉 dos 視窗的方法:          很多人執行完批處理命令發現 dos 視窗不能自動關閉,那是因為你在 bat 檔案中直接執行了需要執行的某些外部程式, 如果希望 dos 視窗自動關閉,

DOS 處理命令

(1)copy con[碟符:][路徑名](檔名) 用於建立.bat檔案或.txt檔案,然後以Ctrl Z結束。 例如:       (a)copy con test.bat 回車                Ctrl Z 回車                

DOS處理命令 For迴圈命令詳解!

for命令是一種對一系列物件依次迴圈執行同一個或多個命令的在命令列或批處理中執行的命令,結合一些Windows管理中的程式後,其處理功能強大、應用靈活方便程度令人刮目相看。但是,其幫助資訊也因此複雜往往令初學者望而生畏,這裡根據本人的學習理解,把其用法分解簡化,疏忽和錯誤也

DOS處理命令之for命令(批量安裝APK)

for命令語法及使用 @ECHO OFF set /a sum=0 for %%x in (*.txt) do ( echo %%x檔案的內容如下: type %%x echo. set /a sum=sum+1 ) echo 一共顯示了%sum%個文字檔案!

dos 處理命令】之 shutdown 命令

一個簡單的例子 新建一個txt,開啟。 輸入shutdown /s /t 3600 /c "您的電腦還有1小時自動關機" 。 儲存檔案,並將檔案字尾名改為.bat。 右擊以管理員身份開啟,你的電腦將

常用處理命令總結3之Find和FindStr

ttr 計算 例如 ber 文件名 忽略大小寫 cap 應該 dst @echo offfindstr /V "[4-4]" all210.txt > no4.txtpause::註釋 /n是顯示出來第幾行!查不帶4的可註冊的域名 find 作

DOS處理列舉所有碟符 和 fsutil命令檢視檔案系統

dos批處理列舉所有驅動器,在最後一個驅動器上建立你指定的目錄。   在純dos環境下你可以使用goto來指定它的走向,純dos環境下沒有vbscript可以使用,而dos命令就成為了較通用的指令碼。 @REM  其中redtek這個名字為你想要建立的目錄名稱

DOS處理高階教程(三) : 處理變數和set命令詳解

前言 這裡主要是帶著過一下相關的簡單概念和用法, 是對於有一定的基礎和編寫指令碼經驗的同學而言, 那麼一般下面的用法都是一眼看出作用和原理起到一個複習的作用。對於不熟悉的可以查詢相關命令和百度即可。 第四章 批處理中的變數 批處理中的變數,我

取得資料夾大小的 DOS 下的處理命令

@For /F "tokens=*" %%a IN ('"dir /s /-c | find "bytes" | find /v "free""') do @Set summaryout=%%a@Echo %summaryout%@For /f "tokens=1,2 del

Dos處理 Start命令的引數

Dos批處理命令bat檔案執行完以後自動關閉dos視窗的方法:     很多人執行完批處理命令發現dos視窗不能自動關閉,那是因為你在bat檔案中直接執行了需要執行的某些外部程式,如果希望dos視窗自動關閉,那麼,你可以使用start命令來執行該外部程式,而不是直接寫上一行

.bat處理命令常用操作

轉載自:https://www.cnblogs.com/aspirant/p/7233893.html感謝博主的分享。。。。。轉載過來學習一下。Bat命令學習一、基礎語法:    1.批處理檔案是一個“.bat”結尾的文字檔案,這個檔案的每一行都是一條DOS命令。可以使用任何

MATLAB 常用數據處理命令

記錄 media sort 向量 排列 行號 常用 ascend des 1. 元素排序: sort(X)返回一個對X中的元素按升序排列的新向量 [Y,I]=sort(A,dim,mode) 若dim=1,則按列排;若dim=2,則按行排(dim默認為1) 若mode=as

jmeter maven自動移動jar包windows 處理命令

col 工具 lean tdi art apach director 當前 tar jmeter項目maven文件下面放這.bat 工具,可以把必要的jar包移動到jmeter響應的文件夾下面 rem 本文件放在jmeter 腳本maven項目根目錄下面,和pom.xml

處理命令之Start的詳細用法

圖形用戶界面 用法 blog 中斷 空間 file 創建 單獨 詳細信息 Start啟動單獨的“命令提示符”窗口來運行指定程序或命令。如果在沒有參數的情況下使用,start 將打開第二個命令提示符窗口。語法start ["title"] [/dPat

處理命令get_line獲取文本總行數並顯示指定行的內容

get_line 批處理獲取文本總行數 批處理顯示文本指定行內容 研究背景 get_line是一個很好的工具,它能快速獲取文本內容總行數(不包括空行),並顯示指定行內容。它有一個特點,就是計算的總行數不包括空行,也就是說它只統計非空行的行數,對處理矩陣數據非常有用。使用幫助獲取文本內容

windows 下 方便工作的bat文件處理命令

pau 批處理 目錄 刪除 lims find delayed exp LEDE 1.刪除目錄下 不包含某串字符的文件: @echo offfor /f "delims=" %%a in (‘dir /s /a-d/b *.mp3‘) do ( echo "%%~n

2.1.1基礎之處理命令xcopy move del md

ref set 子目錄 對比 .html win 裏的 創建文件夾 htm Windows命令行batcmd腳本的應用之自動備份 異地備份 遊旗丶引莫(孫忠)2.1.1基礎之批處理命令xcopy move del md Windows命令行batcmd腳本的應用之自動備份

處理命令學習筆記——Start命令

Start 命令 啟動另一個視窗執行指定的程式或命令,所有的DOS命令和命令列程式都可以由start命令來呼叫。 語法:START ["title"] [/Dpath] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED] [/LOW | /NORMAL | /HIGH | /