Komplexe Umbenennung mit Variabler Zeichenlänge mittels Batch
Hallo Zusammen,
ich habe mal wieder den Weg zu euch gefunden da mitlesen mal nicht mehr reichte.
Wir haben folgendes Szenario was mir Kopfzerbrechen bereitet:
Via Scanner Scannen wie Akten welche Barcodes enthalten aus denen eine XML zur gescannten PDF erstellt wird. Diese heissen dann zB:
FastScan_7660823_2018-01-30_132252460.pdf
FastScan_7660823_2018-01-30_132252460.xml
Zu Problemen kommt es wenn am selben Tag, genauer gesagt zur gleichen Zeit mehrere Akten zu einem Fall gescannt werden. Dann haben wir zusätzlich Files wie diese:
FastScan_7660823_2018-01-30_132252460_20180130132315251.pdf
FastScan_7660823_2018-01-30_132252460_20180130132315251.xml
Hierbei kann es allerdings vorkommen das XML und PDT eine Hunderstel getrennt sind, also zB
FastScan_7660823_2018-01-30_132252460_20180130132315252.pdf
FastScan_7660823_2018-01-30_132252460_20180130132315251.xml
Dies führt zu Verarbeitungsproblemen in meinen Schnittstellen da er die Paare nicht mehr passend zusammenfindet. Deshalb war es meine Absicht vor Start der Schnittstellenverarbeitung mittels Batch die 3 Hunderstel-Stellen zu entfernen. Dank Lesen einiger eurer Themen bin ich jetzt so weit, sprich Namenlängeauslesen um besagte Stelle zu finden und wenn sie vorkommt halt cutten:
bei auskommentierter Zeile 17 erhalte ich folgende Ausgabe:
ist Zeile 17 aktiv bekomme ich einen Syntaxfehler, habe es hier auch mit !trim1! probiert allerdings kommt er dann auch nicht ins IF hinein um das echo auszugeben. Sprich mein grossen Problem ist hier das korrekte einbauen des IFs, da ohne IF ich alles korrekt zum laufen kriege, allerdings sollen halt Dateien ohne Erweiterungszeitstempel garnicht angefasst werden. Wenn jemand aber noch andere Ideen hat wie ich das viel einfacher lösen kann sag ich auch nicht nein.
Gerne auch ne brauchbare Lösung mit nem Delimter daran bin ich total verzweifelt als ich versuchte ein IF über die Anzahl der Token zu generieren.
ich habe mal wieder den Weg zu euch gefunden da mitlesen mal nicht mehr reichte.
Wir haben folgendes Szenario was mir Kopfzerbrechen bereitet:
Via Scanner Scannen wie Akten welche Barcodes enthalten aus denen eine XML zur gescannten PDF erstellt wird. Diese heissen dann zB:
FastScan_7660823_2018-01-30_132252460.pdf
FastScan_7660823_2018-01-30_132252460.xml
Zu Problemen kommt es wenn am selben Tag, genauer gesagt zur gleichen Zeit mehrere Akten zu einem Fall gescannt werden. Dann haben wir zusätzlich Files wie diese:
FastScan_7660823_2018-01-30_132252460_20180130132315251.pdf
FastScan_7660823_2018-01-30_132252460_20180130132315251.xml
Hierbei kann es allerdings vorkommen das XML und PDT eine Hunderstel getrennt sind, also zB
FastScan_7660823_2018-01-30_132252460_20180130132315252.pdf
FastScan_7660823_2018-01-30_132252460_20180130132315251.xml
Dies führt zu Verarbeitungsproblemen in meinen Schnittstellen da er die Paare nicht mehr passend zusammenfindet. Deshalb war es meine Absicht vor Start der Schnittstellenverarbeitung mittels Batch die 3 Hunderstel-Stellen zu entfernen. Dank Lesen einiger eurer Themen bin ich jetzt so weit, sprich Namenlängeauslesen um besagte Stelle zu finden und wenn sie vorkommt halt cutten:
rem @echo off &
setlocal enabledelayedexpansion
set "Ordner=H:\Batchtest\INPUT"
set /a Stellen=3
for /f "delims=" %%i in ('dir /s/b/a-d "%Ordner%\*.*"') do (
set Name=%%~ni
call :StrLength !Name!
set /a StrLength = !StrLength!-%Stellen%
echo String length: !StrLength!
echo Name !Name!
set trim=!Name:~-18!
echo test !trim!
set trim1=!trim:~0,2!
echo test1 !trim1!
rem if %trim% == "_2" (
echo ren "%%i" "!Name:~,%StrLength%!%%~xi" )
echo move /-y %%i "H:\Batchtest\OUT"
)
goto :eof
:StrLength
set WorkString=%*
set Length=0
:StrLengthLoop
if not "!WorkString:~%StrLength%,1!"=="" (
set /a StrLength += 1
goto StrLengthLoop
)
goto :eof
bei auskommentierter Zeile 17 erhalte ich folgende Ausgabe:
H:\Batchtest>goto :eof
String length: 52
Name FastScan_7854761_2018-01-30_071913568_20180130072028689
test _20180130072028689
test1 _2
ren "H:\Batchtest\INPUT\FastScan_7854761_2018-01-30_071913568_20180130072028689.xml" ".xml"
move /-y %i "H:\Batchtest\OUT"
ist Zeile 17 aktiv bekomme ich einen Syntaxfehler, habe es hier auch mit !trim1! probiert allerdings kommt er dann auch nicht ins IF hinein um das echo auszugeben. Sprich mein grossen Problem ist hier das korrekte einbauen des IFs, da ohne IF ich alles korrekt zum laufen kriege, allerdings sollen halt Dateien ohne Erweiterungszeitstempel garnicht angefasst werden. Wenn jemand aber noch andere Ideen hat wie ich das viel einfacher lösen kann sag ich auch nicht nein.
Gerne auch ne brauchbare Lösung mit nem Delimter daran bin ich total verzweifelt als ich versuchte ein IF über die Anzahl der Token zu generieren.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 363118
Url: https://administrator.de/contentid/363118
Ausgedruckt am: 25.11.2024 um 07:11 Uhr
2 Kommentare
Neuester Kommentar
Moin.
Würde ich schnell mit einem Powershell-Einzeiler abfackeln, wir sind ja nicht mehr in der Steinzeit ...
Gruß snap
Würde ich schnell mit einem Powershell-Einzeiler abfackeln, wir sind ja nicht mehr in der Steinzeit ...
gci 'H:\Batchtest\INPUT\*' -include '*.pdf','*.xml' -recurse | ?{$_.Basename -match '_\d{17}$'} | rename-item -NewName {($_.Basename -replace '\d{3}$','') + $_.Extension} -Force