批處理管理檔案以及資料夾

2021-07-09 12:07:23 字數 4506 閱讀 8383

一、       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...