清空資料夾內容 - PCZONE 討論區

返回   PCZONE 討論區 > ▲ -- 電 腦 軟 體 討 論 區 > -- Windows 討 論 版


PCZONE 討論區



通知

-- Windows 討 論 版 包括 Windows 95/98/ME、Windows NT/2000/XP/Server 2003 等的疑難雜症解答與經驗分享。

あなたの家に行く
清空資料夾內容
最近構思的一個腳本,用來刪除資料夾內容,但不刪除資料夾本身。

經過簡易測試,在此提供給有需要的使用者。設計上有疏漏的地方,可以詳細說明問題。

語法:
@echo off

:start

if not "%~1"=="" (
if exist "%~1\" (
for /f "delims=" %%v in ('dir /ad /b "%~1\" ^2^>nul') do rd /s /q "%~1\%%v"
del /a /f /q "%~1\" 2>nul
)
shift /1
) else (goto:eof)

goto start
語法:empty <資料夾> [<資料夾>...]

限制:不支援萬用字元

上傳的附加檔案
檔案類型: 7z empty.7z (318 Byte, 3 次觀看)
回覆
我是嫩咖
回覆: 清空資料夾內容
del 資料夾\*.* /s /q

也能達到目的,是這樣嗎?

把以下的內容存成bat或cmd,還可以透過帶參數的方式來執行,例如存成OF.bat,要刪掉A目錄底下所有的檔案但保留資料夾,那可以下OF A。
del %1\*.* /s /q

此篇文章於 2012-01-02 10:22 PM 被 mis339 編輯。.
回覆
あなたの家に行く

empty dir = rd /s /q dir & md dir

本來想找當時微軟在 Windows 2000 某網頁提供的範例,不過年代久遠,用搜尋引擎一時也找不到,所以只好自己寫一個來使用。
回覆
會員
回覆: 清空資料夾內容
執行 empty.BAT 在同一個目錄下的檔案都還在
我把資料夾拖到 empty.BAT 上 子資料夾也是會被砍

WIN7 64BIT
回覆
あなたの家に行く

看起來是這樣的行為,沒有問題。其實這個小腳本,從去年想到今年,修改將近 20 回合,目前算能接受的結果。

為了防止誤操作,不存在任何參數,就不會有動作。喜歡的話,測試 empty . 和 empty c: d: e: 命令,就可以刪除現行目錄的資料,以及 C: D: E: 磁碟的所有資料。

有考慮檔案屬性,但是忽略權限的問題。

引用:
作者: playkof 觀看文章
執行 empty.BAT 在同一個目錄下的檔案都還在
我把資料夾拖到 empty.BAT 上 子資料夾也是會被砍

WIN7 64BIT
回覆
あなたの家に行く

今天回想到一種寫法,處理效率會好很多。

語法:
@echo off

:start

if not "%~1"=="" (
if exist "%~1\" (
pushd "%~1\"
rd /s /q . 2>nul
popd
)
shift /1
) else (goto:eof)

goto start
之所以說是回想,是因為當初搜尋範例時,有人提出的另類解法。經過簡易測試,既簡單又有效。
上傳的附加檔案
檔案類型: 7z empty.7z (252 Byte, 3 次觀看)
回覆
會員
回覆: 清空資料夾內容
我個人是不清楚 empty.bat 這個批次檔要做什麼?

rd /s /q . 2>nul

rd /s /q "%1" "%2" "%3" ......... 2>nul 不是直接可以刪嗎?


@ECHO OFF
CLS
:START
set /p INPUT="輸入路徑名稱 (例: c:\temp\test\ )? "
IF ERRORLEVEL 1 GOTO :eof
rd /s /q "%INPUT%" 2>nul
goto :START

按 <Enter> 結束
輸入目錄路徑名稱刪那個目錄 有 \ 刪裡面, 沒 \ 含自己都刪.

如果要用批次檔跑
test.bat

@ECHO OFF
CLS
:START
rd /s /q "%1" 2>nul
shift
if not "%~1"=="" goto :START

test "F:\Temp\empty\新資料夾\新資料夾\" "F:\Temp\empty\新資料夾\"

此篇文章於 2012-01-05 01:55 AM 被 bx2aa 編輯。.
回覆
あなたの家に行く

引用:
作者: bx2aa 觀看文章
@ECHO OFF
CLS
:START
set /p INPUT="輸入路徑名稱 (例: c:\temp\test\ )? "
IF ERRORLEVEL 1 GOTO :eof
rd /s /q "%INPUT%" 2>nul
goto :START

按 <Enter> 結束
輸入目錄路徑名稱刪那個目錄 有 \ 刪裡面, 沒 \ 含自己都刪.
感謝提供新的想法。自己是在 Windows XP 測試功能,用這個腳本測試後還是有些奇怪,和期望的結果不同。

猜想是受到非 Windows 系統的影響?因為某些基本功能,多少會有解釋上的差異,不容易 100% 移植轉換。

由於個人喜好,這裡只寫出適合自己能理解的語法和行為,不太能列舉出各種應用方法,請大家包涵。

回覆
會員
回覆: 清空資料夾內容
mis339 說的
del %1\*.* /s /q
就是保留資料夾結構, 所有檔案都刪除.

只需改一下

@ECHO OFF
CLS
del c:\temp\delete-LOG.txt /q
:START
set /p INPUT="輸入路徑名稱 (例: c:\temp\test )? "
IF ERRORLEVEL 1 GOTO :eof
del /s /q "%INPUT%\*.*" 1>>c:\temp\delete-LOG.txt 2>&1
goto :START

批次檔方式
@ECHO OFF
CLS
del c:\temp\delete-LOG.txt /q
:START
if "%~1"=="" goto :eof
del /s /q "%1\*.*" 1>>c:\temp\delete-LOG.txt 2>&1
shift
if not "%~1"=="" goto :START


結果:
type c:\temp\delete-LOG.txt

刪除的檔案 - F:\Temp\test\新資料夾 (10)\新增文字文件.txt
刪除的檔案 - F:\Temp\test\新資料夾 (10)\新資料夾\新增文字文件.txt
刪除的檔案 - F:\Temp\test\新資料夾 (2)\新增文字文件.txt
刪除的檔案 - F:\Temp\test\新資料夾 (2)\新資料夾\新增文字文件.txt
刪除的檔案 - F:\Temp\test\新資料夾 (3)\新增文字文件.txt
刪除的檔案 - F:\Temp\test\新資料夾 (3)\新資料夾\新增文字文件.txt
刪除的檔案 - F:\Temp\test\新資料夾 (4)\新增文字文件.txt
刪除的檔案 - F:\Temp\test\新資料夾 (4)\新資料夾\新增文字文件.txt
刪除的檔案 - F:\Temp\test\新資料夾 (5)\新增文字文件.txt
刪除的檔案 - F:\Temp\test\新資料夾 (5)\新資料夾\新增文字文件.txt
刪除的檔案 - F:\Temp\test\新資料夾 (6)\新增文字文件.txt
刪除的檔案 - F:\Temp\test\新資料夾 (6)\新資料夾\新增文字文件.txt
刪除的檔案 - F:\Temp\test\新資料夾 (7)\新增文字文件.txt
刪除的檔案 - F:\Temp\test\新資料夾 (7)\新資料夾\新增文字文件.txt
刪除的檔案 - F:\Temp\test\新資料夾 (8)\新增文字文件.txt
刪除的檔案 - F:\Temp\test\新資料夾 (8)\新資料夾\新增文字文件.txt
刪除的檔案 - F:\Temp\test\新資料夾 (9)\新增文字文件.txt
刪除的檔案 - F:\Temp\test\新資料夾 (9)\新資料夾\新增文字文件.txt


此篇文章於 2012-01-06 04:20 PM 被 bx2aa 編輯。.
回覆







 XML   RSS 2.0   RSS 
本站使用 vBulletin 合法版權程式
站務信箱 : [email protected]

本論壇所有文章僅代表留言者個人意見,並不代表本站之立場,討論區以「即時留言」方式運作,故無法完全監察所有即時留言,若您發現文章可能有異議,請 email :[email protected] 處理。