PowerShell opAddition Fehler beim Kopieren und Umbenennen von Dateien
Hallo zusammen,
ich mal wieder - ich finde keine Lösung zum folgenden Problem. Das PowerShellskript kopiert als erstes Dateien von einen in einen anderen Ordner, danach sollen die Dateien mit einer SQL Abfrage, dynamisch abgeändertwerden im Namen. Dies funktioniert auch - aber! - Nachdem die Dateien kopiert wurden und das Umbenennen beginnen soll (hier hole ich mir nochmal alle kopierten Dateien in einen Array, damit ich diesen in der Schleife entsprechend der SQL Anweisung abändern kann) bekommeich folgende Fehlermeldung:
Wenn ich den "neuen Pfad vom Kopieren" bzw diesen Pfad zum auslesen aller Dateien manuelle angebe, oder das Skript in zwei Schritten manuell durchführe, also erst den Kopiervorgang, danach das Umbenennen, bekomme ich keine Fehlermeldun.
Was genau geht hier schief? An der Pfadzusammenstellen "$toDIR" erkenne ich keinen Fehler.
Danke wieder vorab für schnelle Hilfe!!
ich mal wieder - ich finde keine Lösung zum folgenden Problem. Das PowerShellskript kopiert als erstes Dateien von einen in einen anderen Ordner, danach sollen die Dateien mit einer SQL Abfrage, dynamisch abgeändertwerden im Namen. Dies funktioniert auch - aber! - Nachdem die Dateien kopiert wurden und das Umbenennen beginnen soll (hier hole ich mir nochmal alle kopierten Dateien in einen Array, damit ich diesen in der Schleife entsprechend der SQL Anweisung abändern kann) bekommeich folgende Fehlermeldung:
Fehler beim Aufrufen der Methode, da [System.IO.DirectoryInfo] keine Methode mit dem Namen "op.Addition" enthält.
Wenn ich den "neuen Pfad vom Kopieren" bzw diesen Pfad zum auslesen aller Dateien manuelle angebe, oder das Skript in zwei Schritten manuell durchführe, also erst den Kopiervorgang, danach das Umbenennen, bekomme ich keine Fehlermeldun.
Was genau geht hier schief? An der Pfadzusammenstellen "$toDIR" erkenne ich keinen Fehler.
function querySQL {
Param(
[string]$cSQL
)
$connectionString = "..."
# SQL Verbindung aufbauen
$connection = New-Object system.data.SqlClient.SQLConnection($connectionString)
$command = New-Object system.data.sqlclient.sqlcommand($cSQL,$connection)
$connection.Open()
$adapter = New-Object System.Data.sqlclient.sqlDataAdapter $command
$dataset = New-Object System.Data.DataSet
try{
# Tabelle erstellen
$adapter.Fill($dataSet) | Out-Null
$connection.Close()
$dataSet.Tables
}catch{
Write-Host "SQL Ergebnis war unschlüssig." -ForegroundColor Yellow
}
}
$j=@(10..([datetime]::now).tostring("yy"))
$m=@(1..12)
try{
[int]$Jahr=read-host "Welches Jahr? (2019 = 19, 2020 = 20, etc.)" -ErrorAction Stop
[int]$Monat=read-host "Welcher Monat? (Januar = 1, Februar = 2, etc.)" -ErrorAction Stop
}catch{
Write-Host "Keine gültige Eingabe!" -ForegroundColor Yellow
exit
}
if($Jahr -in $j){
if($Monat -in $m){
if($Monat -le 9){
$Pfad=$("\\DC\DXS\20"+$Jahr+"0"+$Monat+"\SENDLIEF\")
} else {
$Pfad=$("\\DC\DXS\20"+$Jahr+$Monat+"\SENDLIEF\")
}
}
} else {
write-host "Eingabe $Jahr - Nur zweistellig bitte." -ForegroundColor Yellow
exit
}
if(!(Test-Path $($Pfad.Replace('SENDLIEF\','')+"S_RENAME"))){
$toDIR=New-Item -Path $($Pfad.Replace('SENDLIEF\','')+"S_RENAME") -ItemType Directory
} else {
$toDIR=$($Pfad.Replace('SENDLIEF\','')+"S_RENAME")
}
[array]$LS=(Get-ChildItem -Path $($Pfad+"\*") -Include "*.pdf") | Copy-Item -Destination $toDIR
#--------------------- Bis hierhin klappt alles wunderbar!
[array]$DIR=(Get-ChildItem -Path $($toDIR+"\*") -Include "*.pdf") | ?{($_.BaseName -notlike '(SUNDL)*')}
#-------------------- Hier wird der Fehler markiert in der Meldung....
#-------------------- würde funktionieren, jedoch Abbruch. s.o ....
for($i=0;$i -lt $DIR.Length; $i++){
$str=$DIR[$i].BaseName
$Nr_Ref1=$str.split("_")
$Nr_Alfa=$str.split("_")[1]
$CMD="..... and Nr_Ref1 like'$Nr_Ref1%' and alfanumAnw5='$Nr_Alfa'"
[array]$Rename=(querySQL -cSQL $CMD).NEW
for($x=0;$x -lt $Rename.Length; $x++){
write-host "Dateiname: " $DIR[$i].Fullname", wird in unbenannt " $Rename[$x] -ForegroundColor Cyan
try{Rename-Item -Path $DIR[$i].FullName -NewName $Rename[$x] -ErrorAction Stop}
catch{write-host "Datei $Rename vermutlich schon umbenannt." -ForegroundColor Yellow}
}
}
Danke wieder vorab für schnelle Hilfe!!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 627075
Url: https://administrator.de/contentid/627075
Ausgedruckt am: 22.11.2024 um 12:11 Uhr
2 Kommentare
Neuester Kommentar
Die Fehlermeldung ist doch eindeutig .
oder alternativ kann man das Konstrukt auch ohne Plus schreiben
Also in dieser Zeile gesamt dann so
Oder wandele alternativ vorher die Variable $toDir in einen reinen String um indem du dort schon die Property angibst.
$($toDIR+"\*")
Das ist dein Fehler du versuchst ein Objekt ($toDir ist hier kein String sondern ein Objekt) mit dem Typ [DirectoryInfo] mittels + Operator mit einem STRING zu verknüpfen und das klappt eben nicht, gebe die entsprechende String-Property des Objekts an dann klappt auch das($toDir.FullName + "\*")
"$($toDir.FullName)\*"
[array]$DIR=Get-ChildItem -Path "$($toDir.FullName)\*" -Include "*.pdf" | ?{$_.BaseName -notlike '(SUNDL)*'}
$toDIR=(New-Item -Path ($Pfad.Replace('SENDLIEF\','')+"S_RENAME") -ItemType Directory).FullName