Quersummen-Datei pro Ordner erstellen (checksum crc md5 sha)
Moderators: Hacker, Stefan2, white
Quersummen-Datei pro Ordner erstellen (checksum crc md5 sha)
Ich möchte gerne bei vielen Verzeichnissen eine Quersumme pro Verzeichnis erstellen. Ich habe beim erstellen die Option das man für jede Datei eine Quersumme erstellen kann oder nicht. Lass ich die option eingeschaltet so wird auch tatsächlich für jede Datei in den einzelnen Verzeichnissen eine Quersummendatei angelegt. Wähle ich es ab so wird nur eine Quersumme gebildet wo alle Dateien aus allen Verzeichnissen in einer Quersummendatei geschrieben werden. Besteht irgendwie die Möglichkeit das ich mehrere Verzeichnisse auswählen kann und TC nur 1 Quersummendatei pro Verzeichnis incl. U-Verzeichnissen erstellt.
Vielen Dank
Falls es keine Möglichkeit gibt wäre es schön wenn es hierzu noch eine Option gäbe.
Vielen Dank
Falls es keine Möglichkeit gibt wäre es schön wenn es hierzu noch eine Option gäbe.
Ist doch verständlich.
Für jedes Verzeichnis soll je eine CRC-Datei erstellt werden, in dessen Inhalt sich alle Prüfsummen der in dem Verzeichnis gespeicherten Dateien befinden inc. der Unterverzeichnisse.
Das kann man aber nur machen mit jeweils einem Verzeichnis. Da ich aber einige hundert Verzeichnisse habe ist mir dies zuviel Aufwand.
Markiere Dir einfach mal 2 Verzeichnisse und erstelle von denen eine Quersumme. Menü -> Dateien -> Quersummen erstellen. Vieleicht erkennst du dann das Problem.
Für jedes Verzeichnis soll je eine CRC-Datei erstellt werden, in dessen Inhalt sich alle Prüfsummen der in dem Verzeichnis gespeicherten Dateien befinden inc. der Unterverzeichnisse.
Das kann man aber nur machen mit jeweils einem Verzeichnis. Da ich aber einige hundert Verzeichnisse habe ist mir dies zuviel Aufwand.
Markiere Dir einfach mal 2 Verzeichnisse und erstelle von denen eine Quersumme. Menü -> Dateien -> Quersummen erstellen. Vieleicht erkennst du dann das Problem.
Hier nun die deutsche Version:
Anbei ein PowerShell Skript zur CRC Erzeugung.
Das Skript nimmt ausschließlich Ordnerpfade entgegen und überschreibt keine vorhandenen CRC-Dateien.
Auf einen Button legen mit
Kommando:
Parameter:
Als "CreateChecksum.ps1" speichern und Pfad im Parameter anpassen.
Das Script hat drei optionale Parameter:
-sha1 aktiviert den SHA1 Algorithmus statt MD5.
-insidefolder bewirkt das Speichern der Checksummen-Datei im jeweiligen Ordner statt im Elternverzeichnis.
-donttouch stellt das Änderungsdatum des Ordners wieder her (nur mit -insidefolder).
Das Setzen der Optionen würde so aussehen:
Parameter:
"CreateChecksum.ps1":
Anbei ein PowerShell Skript zur CRC Erzeugung.
Das Skript nimmt ausschließlich Ordnerpfade entgegen und überschreibt keine vorhandenen CRC-Dateien.
Auf einen Button legen mit
Kommando:
Code: Select all
powershell.exe
Code: Select all
-NoExit -ExecutionPolicy remotesigned -Command "&{&'C:\PfadZu\CreateChecksum.ps1' -listFile '%L'}"
Das Script hat drei optionale Parameter:
-sha1 aktiviert den SHA1 Algorithmus statt MD5.
-insidefolder bewirkt das Speichern der Checksummen-Datei im jeweiligen Ordner statt im Elternverzeichnis.
-donttouch stellt das Änderungsdatum des Ordners wieder her (nur mit -insidefolder).
Das Setzen der Optionen würde so aussehen:
Parameter:
Code: Select all
-NoExit -ExecutionPolicy remotesigned -Command "&{&'C:\PfadZu\CreateChecksum.ps1' -sha1 -insidefolder -donttouch -listFile '%L'}"
Code: Select all
# TC Button Parameter:
# powershell.exe
# -NoExit -ExecutionPolicy remotesigned -Command "&{&'C:\PfadZu\CreateChecksum.ps1' -sha1 -insidefolder -donttouch -listFile '%L'}"
Param(
[Parameter(Mandatory=$True)]
[ValidateNotNullOrEmpty()]
[string]$listFile,
[switch]$insidefolder,
[switch]$sha1,
[switch]$donttouch
)
if ($sha1)
{
$algo = "SHA1"
$extensionOutputFile = ".sha"
}
else
{
$algo = "MD5"
$extensionOutputFile = ".md5"
}
$contentListFile = Get-Content -Path $listFile
Write-Output ("Erzeuge $algo Checksumme für " + $contentListFile.Count.ToString() + " Ordner...")
$timeStart = Get-Date
foreach ($folder in $contentListFile)
{
$folderItem = Get-Item -LiteralPath $folder
$nameParentFolder = Split-Path -Path $folderItem -Parent
$isFolder = Test-Path -LiteralPath $folderItem -PathType Container
if ($isFolder)
{
if ($insidefolder)
{
$nameOutputFile = $folderItem.FullName + $folderItem.Name + $extensionOutputFile
$outputFolder = Get-Item -LiteralPath $folderItem.FullName
$lastWriteTimeOutputFolder = $outputFolder.LastWriteTime
}
else
{
$nameOutputFile = $nameParentFolder + '\' + $folderItem.Name + $extensionOutputFile
}
if (Test-Path -LiteralPath $nameOutputFile)
{
Write-Output ("`n" + $nameOutputFile + " existiert bereits. Wird übersprungen.")
}
else
{
$pathFolderItem = $folderItem.FullName.ToString().Replace('[','`[').Replace(']','`]')
$colFiles = Get-ChildItem -Path $pathFolderItem -Recurse -File
foreach ($file in $colFiles)
{
$hashFile = Get-FileHash -LiteralPath $file.FullName -Algorithm $algo
$relativeName = $file.FullName.Remove(0, $folderItem.FullName.Length)
if ($insidefolder)
{
$finalString = $hashFile.Hash + ' *' + $relativeName
}
else
{
$finalString = $hashFile.Hash + ' *' + $folderItem.Name + '\' + $relativeName
}
Out-File -LiteralPath $nameOutputFile -InputObject $finalString -Append
}
if ($donttouch -and $insidefolder)
{
$outputFolder.LastWriteTime = $lastWriteTimeOutputFolder
}
}
}
}
$timeEnd = Get-Date
$timeSpan = New-TimeSpan -Start $timeStart -End $timeEnd
Write-Output ("`nFertig. Dauer: " + $timeSpan.ToString("hh\:mm\:ss\,fff"))