一、 set 命令
回顧一下set 命令有兩個引數
1 /a 直接設定了乙個變數或者變數表示式,比如:
set /a var=2; 或者 set /a var+=2;
2 /p 設定乙個變數,這個變數來自使用者的命令列的輸入結果
set /p num=請選擇要執行的操作
if %num% == 「1」 ( ……
)二 案列
2.1 批量更改檔名
@echo off
echo ready for updaing file name......
set extension=.rar
set /a sum=0
for %%m in (*) do (
if not"%%m" == "updatefilename.bat" (
ren %%m%%m%extension%
set /a sum+=1 )
)echo finished update file name. there has%sum% files wereupdated!
set sum=
set extension=
pause
注意:ren
命令是重新命名檔案的命令
2.2 迴圈執行命令
@echo off
echo test ping the host 192.168.3.115......
:again
ping 192.168.3.115 > nul rem > nul don't show themessage
if not %errorlevel% != 0 goto again
start "could connect to host" echo success toconnect host 192.168.3.115
2.3 當前路徑 (%cd% vs %~dp0)
%cd%:可以用在批處理檔案中,也可以用在命令列中; 其內容為命令的執行路徑或批處理檔案的執行路徑. 也就是我在e盤執行乙個d盤的批處理檔案, %cd% 顯示的還是e盤,並非d盤
%~dp0:只能用於批處理檔案中,它列印的只是批處理檔案所在的位置,而與在什麼位置執行這個檔案沒有關係,所以我在e盤執行d盤的批處理檔案,那麼他的顯示結果是d盤
@echo off
echo %%cd%%: %cd%
echo %%~dp0%: %~dp0
pause
e:\script_bench>printpath.bat
%cd%: e:\script_bench
%~dp0: e:\script_bench\
'puase' is not recognized as an internal orexternal command,
operable program or batch file.
e:\script_bench>d:
d:\>e:\script_bench\printpath.bat
%cd%: d:\
%~dp0: e:\script_bench\
2.4 將檔名自動更新為當前系統日期
@echo off
if not exist %1 (
echo required filenot exist, please check you file
goto end )
rem %1:
被修改的檔名
~x:得到變數的副檔名
%~x1
:表示%1
檔案的副檔名
set extension=%~x1
rem date/t 01/16/2016 sat
for /f "tokens=1-3 delims=/- " %%c in ('date/t') do(
rem
如果在for
迴圈初始變數能確定,以及迴圈次數能確定,那麼連續的幾個變數是有效的
比如這裡的
cd e
set date=%%c%%d%%e )
ren %1 %date%%extension%
echo.
echo file: %1 has been updated to %date%%extension%
set extension=
set date=
:end
echo done
pause
2.5 批處理程式中不同碟符路徑的切換
這個是很有用的,比如有時候我們想切換到某個碟符路徑下執行某個批處理檔案,這時候這個可以派上用場
@echo off
echo.
echo
從當前碟符切換到
e:\script_bench\files
pushd e:\script_bench\files
echo
當前路徑:
%cd%
echo
當前路徑包含以下資料夾:
dir/ad/b
echo.
echo
執行打包
bat
call updatefilename.bat
echo
返回批處理執行時所在的碟符及路徑
popd
pause
pushd
要切換的路徑
popd
:返回最近一次執行
pushd
命令之間的路徑,這樣可以避免更改當前的工作路徑
dir: /a
展示帶有指定屬性的檔案
d屬性,表示只顯示資料夾
/b 以見簡潔的方式顯示,詳情請查閱
dir/?
2.6 計算當前目錄以及子目錄所佔的硬碟空間
@echo off
echo computing the space of current directory......
echo **********************************************
for /f "tokens=*" %%a in ('dir') do (
echo"%%a"|find" files" > nul && for /f"tokens=3*" %%b in ("%%a") do (
echo currentdirecotry space: %%b%%c )
)echo **********************************************
echo computing the space of child direcotry........
for /f %%a in ('dir/ad/s/b') do (
for /f"tokens=*" %%b in ('"dir %%a\"') do (
echo"%%b"\find" files" > nul for /f "tokens=3*"%%c in ('%%b') do (
echo%%a: %%c%%d )
) )echo end of computing
note:
假如執行乙個命令,但是不想在螢幕裡看到這個命令的執**況,可以使用"[命令]>nul"就可以遮蔽命令在螢幕上的輸出,但是有的命令執行會出錯,即使用了">nul"也不能遮蔽命令產生的資訊,所以就在後面加" 2>nul"這個,就是"[命令]>nul+空格+2>nul",這樣,不管命令是否正確的執行,都不會在螢幕看到這個命令所產生的螢幕顯示了。
用"dir"命令可以顯示當前目錄的檔案及資料夾列表,這時如果用"dir>nul",就看不見dir命令執行的螢幕輸出了,那麼再鍵入"dirr"時會顯示" 'dirr' 不是內部命令,也不是外部命令,也不是批處理檔案。",這時如果用"dirr>nul"來遮蔽這個錯誤,因為依然會出現" 'dirr' 不是內部命令,也不是外部命令,也不是批處理檔案。"這個錯誤提示,這時如果用"dirr>nul 2>nul"的話,就在螢幕上看不到上面的出錯提示了
2.7 刪除目錄下的空檔案
@echo off
for /f "tokens=*" %%a in ('dir /b /ad /s^|sort /r') do rd"%%a" 2>nul
echo
刪除成功
, 已刪除所有空資料夾
pause
^: 表示後面的字元只是普通的字元,不具有任何特殊含義
2.8 建立乙個空檔案cd.
> empty.txt
cd.
沒有任何輸出
用批處理遍歷列印資料夾以及刪除空資料夾
批處理列印資料夾 方法一 for r d 要遍歷的目錄 i exe do echo i 方法二 set destpath d 你的目錄 rem 你的字尾 set destext exe for f delims i in dir b a d s destpath destext do echo i ...
批處理 新建公共資料夾和使用者資料夾
echo off rem 新建公共資料夾和使用者資料夾 md d public md d user rem 共享公共資料夾給所有使用者唯讀許可權 net share public d public grant everyone,read unlimited echo y cacls d public...
批處理實現資料夾同步
1.設定檔案1 file list.txt 列出要同步的資料夾 dir1 dir2 dirn 2.批處理檔案 copy.cmd set remote root path f dir set local root path d local dir for f a in file list.txt do...