1

我需要一个批处理文件或实用程序,它能够找到任何不再需要的“未压缩存档文件夹”,现在可以删除,因为原始存档文件仍然存在。

关键是“未压缩文件夹”和“原始存档文件”除了存档文件的文件扩展名外始终具有相同的名称。我不想自动删除任何东西;我只想创建一个可以手动签出的文件夹列表。因此,该序列将是一个 4 步过程:

1) 使用 *.zip、*.rar、*.iso 等通配符搜索所有存档文件 2) 创建所有找到的文件名的列表 - 减去文件扩展名 3) 使用在步骤二中创建的列表搜索具有这些名称的任何文件夹 4) 使用在步骤三中找到的任何文件夹创建一个文本文件。

我尝试修改在这些帖子中找到的批处理文件,但没有成功,我想从头开始。任何帮助将不胜感激。

谢谢

4

2 回答 2

0
@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
于 2013-11-12T08:12:28.467 回答
0

好的,我将逐步执行此操作:

步骤1:

set dir="C:\...[path to root directory]" 
where /r %dir% *.zip *.iso *.rar >> log.txt

请注意,where如果使用 Windows 7,该实用程序应该在您的计算机上。

第2步:

ren log.txt log.tmp
for /f "delims=." %%a in (log.tmp) do (Echo %%a >> log.txt)
del log.tmp

上面的代码不会处理带有句点的文件名

第 3 步:

for /f "tokens=*" %%a in (log.txt) do (
where /r %dir% %%a* >> files.txt
)

不是 100% 确定以上是否可行,如果不行,请告诉我。

第4步:

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在每个部分之间使用暂停命令(或作为单独的批处理文件)运行所有这些,以便如果确实发生错误,我可以尝试帮助你。

希望这对您有所帮助,莫娜。

于 2013-11-11T22:45:27.553 回答