Dernière fois, j'ai fini de générer le fichier de la liste des cibles de suppression. Le contenu du fichier ressemble à ceci.
\TMP\200104\delete.txt
C:\TMP\IMG_2607(1).jpg
C:\TMP\IMG_2608(1).jpg
\TMP\200105\delete.txt
C:\TMP\IMG_2610(1).jpg
C:\TMP\IMG_2610(2).jpg
C:\TMP\IMG_2611(1).jpg
Il y a delete.txt dans chaque dossier année / mois (aaaamm) qui contient le chemin complet du fichier que vous souhaitez supprimer ligne par ligne, alors lisez-le et supprimez-le. Puisqu'il est encore au stade de test, j'écrirai le processus pour le dossier de test.
Python : 3.8.3
DeleteAll.py
import glob
import os
if __name__ == "__main__":
files = glob.glob("C:\\tmp\\**\\delete.txt", recursive=True)
for file in files:
with open(file, "r") as f:
for line in f.readlines():
os.remove(line.strip())
M. glob. Pourquoi '\ n'reste-t-il à la fin lors de la lecture avec readlines ()? (Un peu dérangeant)
C# : 8.0(Microsoft Visual Studio Community 2019)
DeleteAll.cs
using System;
using System.IO;
using System.Text;
namespace DeleteAll
{
class DeleteAll
{
static void Main()
{
var files = Directory.GetFiles(@"c:\tmp", "delete.txt", SearchOption.AllDirectories);
foreach (var file in files)
{
foreach (var line in File.ReadAllLines(file, Encoding.GetEncoding("Shift-JIS")))
{
File.Delete(line);
}
}
}
}
}
Je n'y pense pas d'habitude, mais quand je l'ai mis côte à côte avec Python, les parenthèses semblaient très dérangeantes ...
VisualBasic : 6.0
DeleteAll.bas
Option Explicit
Private colFiles As Collection
Public Sub Main()
Set colFiles = New Collection
Call GetFiles("C:\TMP\")
Call DeleteFiles(colFiles)
End Sub
Private Sub GetFiles(ByVal strSearchPath As String)
Dim FSO As FileSystemObject
Set FSO = New FileSystemObject
Dim objSubFolder As Folder
For Each objSubFolder In FSO.GetFolder(strSearchPath).SubFolders
Call GetFiles(objSubFolder.Path)
Next
Dim objFile As file
For Each objFile In FSO.GetFolder(strSearchPath).files
If LCase(objFile.Name) = "delete.txt" Then
Call colFiles.Add(FSO.BuildPath(strSearchPath, objFile.Name))
End If
Next
End Sub
Private Sub DeleteFiles(ByVal files As Collection)
Dim FSO As FileSystemObject
Dim vntFile As Variant
Set FSO = New FileSystemObject
For Each vntFile In files
With FSO.GetFile(vntFile).OpenAsTextStream(ForReading)
Do
Kill .ReadLine()
Loop Until (.AtEndOfLine())
End With
Next
End Sub
Dans la notation hongroise à l'ancienne. Il est très difficile d'implémenter la recherche récursive par vous-même. Avec cela, il est important de se lier sans utiliser FileSystemObject. La déclaration de variable dans GetFiles () est écrite pour déclarer Dim juste avant son apparition, mais dans l'ancienne source VB6, il est habituel d'écrire la déclaration collectivement au début de la méthode. Je pense que c'est le style des gens qui ont coulé C-> VB, mais je vois souvent du code de merde qui a 500 lignes par méthode uniquement pour les sources écrites comme ça.
DeleteAll.bat
@echo off
cd \tmp
for /f "usebackq" %%i in (`dir /s /b delete.txt`) do (for /f %%j in (%%i) do del %%j)
Comme un fichier batch est simple! Au lieu de cela, le format est un peu ésotérique.
Ceci complète ce cas. Maintenant, qu'allons-nous faire ensuite?
Recommended Posts