christianv6
Goto Top

Batch- Dateien mit doppeltem String Charater verschieben

Hallo zusammen,

ich bitte um eure Hilfe, benötigt wird ein Batch-Tool mit dem man Dateien verschiebt.
Und zwar liegen mir lokal mehrere PDF's vor:
1000040_140.pdf
1000040_798.pdf
2999123_123.pdf

Ich möchte jetzt nur die Dateien in einen anderen Ordner verschieben, bei denen die Zeichenkette [die erste 7 Stellen] identisch ist.
Allerdings gibt es auch PDF's die nicht nur 2 mal, sondern auch 20 mal vorkommen, diese sollen dann in einen extra Ordner verschoben werden..

Aufgrund meiner mangelnden Batch Kenntnisse wende ich mich in aller Hoffnung an euch.
LG Christian

Content-Key: 243409

Url: https://administrator.de/contentid/243409

Printed on: April 25, 2024 at 03:04 o'clock

Member: Endoro
Endoro Jul 12, 2014 updated at 03:31:04 (UTC)
Goto Top
Hey,
Das hatten wir kürzlich hier ganz ähnlich.
Gruss, Endoro
Member: christianV6
christianV6 Jul 12, 2014 at 17:12:49 (UTC)
Goto Top
Hey Endoro,

Prima das war schon sehr hilfreich (: danke.
Habe jetzt noch das Problem, das ein extra Ordner erstellt wird und es wird jedes Dokument verschoben.
Ich wollte das nur das die Dokumente verschoben werden die doppelt oder mehrfach vorkommen..

Snippet vom Kollegen: Friemler:

@echo off & setlocal

set "SrcDir=E:\Test"
set "DstDir=E:\Test"

for %%f in ("%SrcDir%\*.pdf") do (
call :ProcessFile "%%~f"
)
exit /b

:ProcessFile
set "FilePath=%~dp1"
set "FileName=%~nx1"
set "Folder=%DstDir%\%FileName:~0,6%"

if not exist "%Folder%" md "%Folder%"
move "%FilePath%%FileName%" "%Folder%\%FileName%" > NUL
exit /b
Member: Endoro
Endoro Jul 13, 2014 at 04:57:23 (UTC)
Goto Top
Hey,
Dann müsstest du noch mal genau sagen, was wohin soll:
- String doppelt --> Duplikat in anderen Ordner
- String 20 mal --> was in extra Ordner? Auch was in anderen Ordner?
- was wird mit (String > 2) && (String ≠ 20)?
- weitere Regeln?

Gruss, Endoro.
Member: christianV6
christianV6 Jul 13, 2014 at 09:48:55 (UTC)
Goto Top
hey,
also Pdf's die nur 2 mal vorkommen sollen in einen Ordner verschoben werden. PDF's die mehrmals vorkommen als 2 mal sollen in einen Ordner verschoben werden und PDF's die nur einem Vorkommen sollen einfach in dem Ordner bleiben. Vielen Dank für die Hilfe schon mal.

LG Grüße Christian
Member: christianV6
christianV6 Jul 17, 2014 updated at 08:10:58 (UTC)
Goto Top
So ich hab hier mal was gebastelt:
Es funktioniert leider nocht nicht ganz, das Script erkennt ob sich eine Datei (Bsp: 1054400,_14011233123.pdf) oder mehrere Datein im Ordner befinden.

Leider funktionert die IF Abfrage nocht nicht.
Hoffe Ihr könnt mir weiterhelfen. Danke LG

 
@echo off
set "search=^"  
setlocal enableDelayedExpansion
echo(!$1!|findstr /r /c:"!search!" >nul && (  
  echo FOUND - Es wurden Dateien gefunden
) || (
 echo NOT FOUND - Der Ordner enthält keine Datein !
  
)
pause

:nosource
Set /P _srcdir="Eingabe des Quellverzeichnis: "  
If NOT Exist "%_srcdir%" Echo Quellverzeichnis %_srcdir% existiert nicht, Eingabe wiederholen&Goto nosource  
Set /P _dstdir="Eingabe des Zielordners: "  
If NOT Exist "%_dstdir%" MD "%_dstdir%"  
:Abfrage
@echo off


IF !search! GTR !search!(
rem hier ist ein fehler drinne hier sollte eig der Vergelich statt finden ob die Datei Zweimal voranden ist

 echo Ist mehrmals vorhanden die DAtei
 echo Die Dateien werden nun verschoben! 
 for /R %%a IN (%search%) do move "%%a" "%_dstdir%"   

) ELSE (

echo Datei ist nur einmal vorhanden
echo Datei bleibt im Ordner
)

pause
Member: Endoro
Solution Endoro Jul 18, 2014 updated at 07:05:54 (UTC)
Goto Top
Hey,
neben der Nutzung von findstr zum Zählen kannst du Arrays verwenden. In diesem Fall wäre der erste Teil des Dateinamens der Index und die Häufigkeiten des Vorkommens die Elemente.
In der Ausgabe des Codes kannst du das nachvollziehen:
@ECHO OFF &SETLOCAL disableDelayedExpansion
set "Quellordner=test"  
set "Zielordner2=x:\Extra Ordner"  
set "Zielordner3=x:\Anderer Ordner"  
for /f "tokens=1*delims=_" %%a in ('dir /b /a-d "%Quellordner%\*_*.pdf"') do set /a .%%a+=1  
for /f "tokens=1*delims==." %%a in ('set .') do (  
	<nul set /p "=%%b Datei(en) mit %%a_*.pdf "  
	if %%b equ 1 (echo(keine Aktion) else (
		if %%b equ 2 (echo(move "%Quellordner%\%%a_*.pdf" "%Zielordner2%") else (  
			echo(move "%Quellordner%\%%a_*.pdf" "%Zielordner3%"  
		)
	)
)
Gruss, Endoro.
Member: christianV6
christianV6 Jul 18, 2014 at 07:08:01 (UTC)
Goto Top
Hey Endoro,

vielen vielen vielen Dank für deine Hilfe, das Script funktioniert super (: