CRC Hashfiles per Batch erstellen.
Moderators: Hacker, Stefan2, white
CRC Hashfiles per Batch erstellen.
Hallo
Habe mal eine Frage.
Ich will Hashfiles erstellen. Geht auch normal mit Total Commander einfach.
Ich will das aber per Batch machen. Dabei soll für jeden Ordner ein Hashfile erstellt werden.
Beispiel
Ordner
Mein Film 1
Mein Film 2
Mein Film 2
die entsprechenden Files dann
Mein Film 1.sfv
Mein Film 1.sfv
Mein Film 1.sfv
Normal muss ich immer jeden Ordner Manuell anwählen und das File Erstellen lassen.
Und ich will nicht dann die Ordner alle in ein File. Weil das sind mehr Ordner. Man will dann ja nicht gleich alle Checken.
Sollte das mit Total Commander nicht gehen nehme gern auch ein Externes Programm oder Batch Script.
Habe mal eine Frage.
Ich will Hashfiles erstellen. Geht auch normal mit Total Commander einfach.
Ich will das aber per Batch machen. Dabei soll für jeden Ordner ein Hashfile erstellt werden.
Beispiel
Ordner
Mein Film 1
Mein Film 2
Mein Film 2
die entsprechenden Files dann
Mein Film 1.sfv
Mein Film 1.sfv
Mein Film 1.sfv
Normal muss ich immer jeden Ordner Manuell anwählen und das File Erstellen lassen.
Und ich will nicht dann die Ordner alle in ein File. Weil das sind mehr Ordner. Man will dann ja nicht gleich alle Checken.
Sollte das mit Total Commander nicht gehen nehme gern auch ein Externes Programm oder Batch Script.
Im TC9 geht das ganz einfach: Haken setzen bei "Erzeuge separate Quersummendatei für jedes Verzeichnis".
Grüße
Dalai
Grüße
Dalai
#101164 Personal licence
Ryzen 5 2600, 16 GiB RAM, ASUS Prime X370-A, Win7 x64
Plugins: Services2, Startups, CertificateInfo, SignatureInfo, LineBreakInfo - Download-Mirror
Ryzen 5 2600, 16 GiB RAM, ASUS Prime X370-A, Win7 x64
Plugins: Services2, Startups, CertificateInfo, SignatureInfo, LineBreakInfo - Download-Mirror
Das geht Leider nicht so.
Ordner
Filme/Movie 1
Filme/Movie 2
Filme/Movie 3
Ergebniss soll sein
Filme/Movie 1.sfv
Filme/Movie 2.sfv
Filme/Movie 3.sfv
Das TC macht
Filme/Movie 1\Movie 1.sfv
Filme/Movie 2\Movie 2.sfv
Filme/Movie 3\Movie 3.sfv
Hoffe habe das richtig klar gemacht.
Wenn die sfv in einem Ordner nach Filmnamen sind. Kann die diese in Total Commander markieren und checken lassen. Und muss nicht immer extra in die Ordner zum Checken.
Dasselbe hätte ich ja dann mit der File Option machen können.
Und das Checken kann man nicht auf Verzeichnisse anwenden wo dann die sfv Files drin wären. Kopiere ich die sfv in ein Verzeichnis fehlt in den Dateien der Path,
Hier ist da auch Thema aber das Script funktioniert nicht.
http://ghisler.ch/board/viewtopic.php?t=41902&highlight=parameter+mandatory
Ach ja paar Infos.
Windows 7
Komando
powershell,exe
Parameter:
C:\CreateChecksum.ps
Wobei ich sfv erstellen wollte.
Ordner
Filme/Movie 1
Filme/Movie 2
Filme/Movie 3
Ergebniss soll sein
Filme/Movie 1.sfv
Filme/Movie 2.sfv
Filme/Movie 3.sfv
Das TC macht
Filme/Movie 1\Movie 1.sfv
Filme/Movie 2\Movie 2.sfv
Filme/Movie 3\Movie 3.sfv
Hoffe habe das richtig klar gemacht.
Wenn die sfv in einem Ordner nach Filmnamen sind. Kann die diese in Total Commander markieren und checken lassen. Und muss nicht immer extra in die Ordner zum Checken.
Dasselbe hätte ich ja dann mit der File Option machen können.
Und das Checken kann man nicht auf Verzeichnisse anwenden wo dann die sfv Files drin wären. Kopiere ich die sfv in ein Verzeichnis fehlt in den Dateien der Path,
Hier ist da auch Thema aber das Script funktioniert nicht.
http://ghisler.ch/board/viewtopic.php?t=41902&highlight=parameter+mandatory
Code: Select all
Calculating SHA1 checksum for 2 folders...
Get-ChildItem : Es wurde kein Parameter gefunden, der dem Parameternamen "File"
entspricht.
Bei C:\CreateChecksum.ps1:56 Zeichen:75
+ $colFiles = Get-ChildItem -Path $pathFolderItem -Recurse -File <<
<<
+ CategoryInfo : InvalidArgument: (:) [Get-ChildItem], ParameterB
indingException
+ FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Comm
ands.GetChildItemCommand
Die Benennung "Get-FileHash" wurde nicht als Name eines Cmdlet, einer Funktion,
einer Skriptdatei oder eines ausführbaren Programms erkannt. Überprüfen Sie di
e Schreibweise des Namens, oder ob der Pfad korrekt ist (sofern enthalten), und
wiederholen Sie den Vorgang.
Bei C:\CreateChecksum.ps1:59 Zeichen:41
+ $hashFile = Get-FileHash <<<< -LiteralPath $file.FullName -A
lgorithm $algo
+ CategoryInfo : ObjectNotFound: (Get-FileHash:String) [], Comman
dNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
Sie können keine Methode für einen Ausdruck mit dem Wert NULL aufrufen.
Bei C:\CreateChecksum.ps1:60 Zeichen:54
+ $relativeName = $file.FullName.Remove <<<< (0, $folderItem.Fu
llName.Length)
+ CategoryInfo : InvalidOperation: (Remove:String) [], RuntimeExc
eption
+ FullyQualifiedErrorId : InvokeMethodOnNull
Out-File : Es wurde kein Parameter gefunden, der dem Parameternamen "LiteralPat
h" entspricht.
Bei C:\CreateChecksum.ps1:71 Zeichen:38
+ Out-File -LiteralPath <<<< $nameOutputFile -InputObject $fin
alString -Append
+ CategoryInfo : InvalidArgument: (:) [Out-File], ParameterBindin
gException
+ FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Comm
ands.OutFileCommand
Ausnahme beim Festlegen von "LastWriteTime": "Der Prozess kann nicht auf die Da
tei "F:\Filme\A\A Beautiful Mind - Genie und Wahnsinn\" zugreifen, da sie von e
inem anderen Prozess verwendet wird."
Bei C:\CreateChecksum.ps1:76 Zeichen:31
+ $outputFolder. <<<< LastWriteTime = $lastWriteTimeOutputFolde
r
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : PropertyAssignmentException
Get-ChildItem : Es wurde kein Parameter gefunden, der dem Parameternamen "File"
entspricht.
Bei C:\CreateChecksum.ps1:56 Zeichen:75
+ $colFiles = Get-ChildItem -Path $pathFolderItem -Recurse -File <<
<<
+ CategoryInfo : InvalidArgument: (:) [Get-ChildItem], ParameterB
indingException
+ FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Comm
ands.GetChildItemCommand
Die Benennung "Get-FileHash" wurde nicht als Name eines Cmdlet, einer Funktion,
einer Skriptdatei oder eines ausführbaren Programms erkannt. Überprüfen Sie di
e Schreibweise des Namens, oder ob der Pfad korrekt ist (sofern enthalten), und
wiederholen Sie den Vorgang.
Bei C:\CreateChecksum.ps1:59 Zeichen:41
+ $hashFile = Get-FileHash <<<< -LiteralPath $file.FullName -A
lgorithm $algo
+ CategoryInfo : ObjectNotFound: (Get-FileHash:String) [], Comman
dNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
Sie können keine Methode für einen Ausdruck mit dem Wert NULL aufrufen.
Bei C:\CreateChecksum.ps1:60 Zeichen:54
+ $relativeName = $file.FullName.Remove <<<< (0, $folderItem.Fu
llName.Length)
+ CategoryInfo : InvalidOperation: (Remove:String) [], RuntimeExc
eption
+ FullyQualifiedErrorId : InvokeMethodOnNull
Out-File : Es wurde kein Parameter gefunden, der dem Parameternamen "LiteralPat
h" entspricht.
Bei C:\CreateChecksum.ps1:71 Zeichen:38
+ Out-File -LiteralPath <<<< $nameOutputFile -InputObject $fin
alString -Append
+ CategoryInfo : InvalidArgument: (:) [Out-File], ParameterBindin
gException
+ FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Comm
ands.OutFileCommand
Für "ToString" und die folgende Argumenteanzahl kann keine Überladung gefunden
werden: "1".
Bei C:\CreateChecksum.ps1:84 Zeichen:56
+ Write-Output ("`nDone. Duration: " + $timeSpan.ToString <<<< ("hh\:mm\:ss\,ff
f"))
+ CategoryInfo : NotSpecified: (:) [], MethodException
+ FullyQualifiedErrorId : MethodCountCouldNotFindBest
PS F:\Filme\A>
Windows 7
Komando
powershell,exe
Parameter:
Code: Select all
-NoExit -ExecutionPolicy remotesigned -Command "&{&'C:\CreateChecksum.ps1' -sha1 -insidefolder -donttouch -listFile '%L'}"
Code: Select all
# TC Button Parameter:
# powershell.exe
# -NoExit -ExecutionPolicy remotesigned -Command "&{&'C:\PathTo\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 ("Calculating $algo checksum for " + $contentListFile.Count.ToString() + " folders...")
$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 + " already exists. Skipping")
}
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 ("`nDone. Duration: " + $timeSpan.ToString("hh\:mm\:ss\,fff"))
2Koto99
ich habe jetzt gerade zu wenig Zeit, aber die Meldung
bedeutet das du noch PowerShell v2 verwendest, siehe PowerShell Befehl "$Host"
(Dieser Weg ist nicht 100% der Richtige zur Versionsbestimmung, er soll uns aber hier reichen)
Dieser "-File" Parameter für "Get-ChildItem" wurde erst mit PowerShell v3 eingeführt.
Man müsste dieses Skript für PSv2 umschreiben (zumindest mal ein "#requires -version 3" einbauen
)
oder auf PoSh v4 oder v5 updaten: Windows Management Framework https://www.microsoft.com/en-us/download/details.aspx?id=40855
ich habe jetzt gerade zu wenig Zeit, aber die Meldung
Get-ChildItem : Es wurde kein Parameter gefunden, der dem Parameternamen "File" entspricht.
+ $colFiles = Get-ChildItem -Path $pathFolderItem -Recurse -File <<
bedeutet das du noch PowerShell v2 verwendest, siehe PowerShell Befehl "$Host"
Code: Select all
PS D:\temp> $host
Name : ConsoleHost
Version : 2.0
InstanceId : df1423cb-994
Dieser "-File" Parameter für "Get-ChildItem" wurde erst mit PowerShell v3 eingeführt.
Man müsste dieses Skript für PSv2 umschreiben (zumindest mal ein "#requires -version 3" einbauen

oder auf PoSh v4 oder v5 updaten: Windows Management Framework https://www.microsoft.com/en-us/download/details.aspx?id=40855
Aktuell ist PowerShell / WMF 5.1ZoSTeR wrote:If you're running Win7 you need to install PowerShell v4.
Erst mal Danke nun geht das Script nach dem Update von Powershell
Nur ist das auch nicht das was ich möchte.
Das SHA wird nun wieder in den Ordner gepackt.
Das hatten wir ja schon und soll eben genau nicht so sein.
Ich will anwählen
Filme/Movie 1/
Filme/Movie 2/
Filme/Movie 3/
Ergebniss soll sein
Filme/Movie 1.sfv
Filme/Movie 2.sfv
Filme/Movie 3.sfv
Das Sript macht
Filme/Movie 1\Movie 1.sha
Filme/Movie 2\Movie 2.sha
Filme/Movie 3\Movie 3.sha
Damit habe ich wieder dasselbe was mit der File und Ordner Option geht.
Nur ist das auch nicht das was ich möchte.
Das SHA wird nun wieder in den Ordner gepackt.
Das hatten wir ja schon und soll eben genau nicht so sein.
Ich will anwählen
Filme/Movie 1/
Filme/Movie 2/
Filme/Movie 3/
Ergebniss soll sein
Filme/Movie 1.sfv
Filme/Movie 2.sfv
Filme/Movie 3.sfv
Das Sript macht
Filme/Movie 1\Movie 1.sha
Filme/Movie 2\Movie 2.sha
Filme/Movie 3\Movie 3.sha
Damit habe ich wieder dasselbe was mit der File und Ordner Option geht.