[英]Need a batch file that can find folders based on filenames
我需要一個批處理文件或實用程序,該文件或實用程序將能夠找到不再需要的任何“未壓縮存檔文件夾”,並且由於原始存檔文件仍然存在,因此可以將其刪除。
關鍵是“未壓縮的文件夾”和“原始存檔文件”始終具有相同的名稱,但存檔文件的文件擴展名除外。 我不想自動刪除任何內容; 我只想創建一個可以手動檢出的文件夾列表。 因此,該序列將分為四個步驟:
1)使用通配符(例如* .zip,*。rar,*。iso)搜索所有存檔文件2)創建找到的所有文件名的列表-減去文件擴展名3)使用在第二步中創建的列表來搜索具有這些名稱的任何文件夾4)創建一個文本文件,其中包含在第三步中找到的所有文件夾。
我嘗試修改在這些帖子中找到的批處理文件,但是該文件不起作用,我想從頭開始。 任何幫助將不勝感激。
謝謝
好的,我將逐步進行此操作:
set dir="C:\...[path to root directory]"
where /r %dir% *.zip *.iso *.rar >> log.txt
請注意,如果使用Windows 7 where
則應在計算機上使用where
實用程序。
ren log.txt log.tmp
for /f "delims=." %%a in (log.tmp) do (Echo %%a >> log.txt)
del log.tmp
上面的代碼將不處理帶有句點的文件名
for /f "tokens=*" %%a in (log.txt) do (
where /r %dir% %%a* >> files.txt
)
不能100%確定上述方法是否可行,請告訴我是否可行。
Rem This code will handle file paths to directories
Ren files.txt files.tmp
for /f "tokens=*" %%a in (files.tmp) do (
Echo %%~pa >> files.txt
)
del files.tmp
Rem The below code will ged rid of repeated direcotries
ren files.txt files.tmp
Echo. > files.txt
setlocal enabledelayedexpansion
for /f "tokens=*" %%a in (files.tmp) do (
set var=1
for /f "tokens=*" %%b in (files.txt) do (
if "%%~a" equ "%%~b" set var=0
)
if !var!==1 Echo %%a >> files.txt
)
del files.tmp
而且我相當有信心。 當然,我還沒有對此進行測試,但是在@Echo on
並且在每個派別之間(或作為單獨的批處理文件)之間使用暫停命令來運行所有這些,因此,如果確實發生錯誤,我可以嘗試為您提供幫助。
希望這對您有所幫助,Mona。
@echo off
setlocal enableextensions
set "rootDir=d:\_data_"
set "fileList=%~dp0\%~n0.files.list"
set "folderList=%~dp0\%~n0.folders.list"
rem generate list of compressed files names
break > "%fileList%"
for /F "tokens=*" %%f in ('where /r "%rootDir%" *.zip *.rar *.iso *.7z 2^>nul') do (
>> "%fileList%" echo %%~nf
)
rem check compressed file list against directory list
break > "%folderList%"
for /F "tokens=*" %%f in ('dir "%rootDir%" /s /b /ad ^| findstr /e /g:"%fileList%" ') do (
>> "%folderList%" echo %%f
)
type "%folderList%"
endlocal
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.