viking
Goto Top

Mit cmd Datei Dateipaare (*.csv und *.xlsx) aus Ordner in andern Ordner verschieben

Hallo an die Experten,

Ich möchte mit einer CMD Datei aus einem definierten Verzeichnis Dateipaare in ein anderes Verzeichnis verschieben.
Unter Dateipaar verstehe ich zwei Dateien mit exakt gleichem Namen bis auf die Dateiendung.
Also in meinem Beispiel eine CSV Datei und eine Excel Datei.
Wenn nur eine Datei, egal welchen Typs im Quellpfad vorhanden, dann kein verschieben!
Der Quellpfad ist C:\Temp\Eingang\
Der Zielpfad ist C:\Temp\Verarbeitet\

Beispiel:
Quelle:
C:\Temp\Eingang\121.csv
C:\Temp\Eingang\121.xlsx
C:\Temp\Eingang\122.csv
C:\Temp\Eingang\123.csv
C:\Temp\Eingang\123.xlsx


Ziel soll dann sein, dass 121 und 123 in den Ordner C:\Temp\Verarbeitet\
verschobnen werden.
C:\Temp\Verarbeitet\121.csv
C:\Temp\Verarbeitet\121.xlsx
C:\Temp\Verarbeitet\123.csv
C:\Temp\Verarbeitet\123.xlsx


A) Schön wäre noch, wenn ein Zeitstempel (Zeitpunkt des Verschiebens) an dein Dateinamen angehängt wird.
B) Wenn ohne Zeitstempel, dann sollen die Dateien im Zielpfad hart überschrieben werden.

Mich würden beide Varianten A und B interessieren.

Vielen Dank für eure Unterstützung!
viking

Content-ID: 671769

Url: https://administrator.de/forum/mit-cmd-datei-dateipaare-csv-und-xlsx-aus-ordner-in-andern-ordner-verschieben-671769.html

Ausgedruckt am: 06.03.2025 um 12:03 Uhr

CamelCase
CamelCase 06.03.2025 um 08:16:00 Uhr
Goto Top
Moin,

In PowerShell:

Variante 1
$sourcePath = "C:\Temp\Eingang"  
$destinationPath = "C:\Temp\Verarbeitet"  

$csvFiles = Get-ChildItem -Path $sourcePath -Filter "*.csv" -File  

foreach ($csv in $csvFiles) {
    $xlsxPath = Join-Path $sourcePath ($csv.BaseName + ".xlsx")  
    
    if (Test-Path $xlsxPath) {
        $ts = Get-Date -Format "yyyy-MM-dd_HHmmss"  
        
        $destinationCsv = Join-Path $destinationPath ($baseName + "_" + $ts + ".csv")  
        $destinationXlsx = Join-Path $destinationPath ($baseName + "_" + $ts + ".xlsx")  
        
        Move-Item -Path $csv.FullName -Destination $destinationCsv
        Move-Item -Path $xlsxPath -Destination $destinationXlsx
    }
}

Variante 2

$sourcePath = "C:\Temp\Eingang"  
$destinationPath = "C:\Temp\Verarbeitet"  

$csvFiles = Get-ChildItem -Path $sourcePath -Filter "*.csv" -File  

foreach ($csv in $csvFiles) {
    $xlsxPath = Join-Path $sourcePath ($csv.BaseName + ".xlsx")  
    
    if (Test-Path $xlsxPath) {
        Move-Item -Path $csv.FullName -Destination $destinationPath -Force
        Move-Item -Path $xlsxPath -Destination $destinationPath -Force
    }
}
TK1987
TK1987 06.03.2025 aktualisiert um 08:31:29 Uhr
Goto Top
Moin,

@echo off

set "source=C:\Temp\Eingang"  
set "target=C:\Temp\Verarbeitet"  
for /f "Tokens=1,2 Delims=:" %%A in ('time /T') do set "timestamp=%date:~6,4%-%date:~3,2%-%date:~0,2%_%%A-%%B"  

for %%A in ("%source%\*.xlsx") do (  
  if exist "%%~dpnA.csv" (  
    move /Y "%%~A" "%target%\%%~nA_%timestamp%.xlsx"  
    move /Y "%%~dpnA.csv" "%target%\%%~nA_%timestamp%.csv"  
  )
)

Gruß Thomas