Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst Dateien umbennen falls nummer schon vorhanden..

Mitglied: minicoop

minicoop (Level 1) - Jetzt verbinden

29.01.2008, aktualisiert 30.01.2008, 4039 Aufrufe, 14 Kommentare

hallo,

ich bräuchte hilfe bei folgendem scenario:
annahme:
im verzeichnis c:\temp\
liegen dateien mit 000_xyz.dat wobei xyz im grunde fortlaufende nummern sind.
diese möchte ich in das verzeichnis c:\archiv verschieben.
bis hier ist es ja kein problem.
wenn aber in c:\archiv schon die datei existiert, soll die zu verschiebenden dateien hintendrangehängt werden.
also wenn zb im archiv die dateien von 000_000.dat bis 000_123.dat existieren,
und in c:\temp\ dateien mit 000_000.dat bis 000_009.dat liegen, sollen diese ab 000_124.dat anfangen und danach dorthin verschoben werden.

wäre für eure hilfe sehr dankbar.

gruss





[Edit Biber] ich hasse Umbennungen... nein, ich benn das jetzt nicht um...*grmpfff* [/Edit]
Mitglied: bastla
29.01.2008 um 14:26 Uhr
Hallo minicoop!

Etwa so:
01.
@echo off & setlocal
02.
set "Source=C:\temp"
03.
set "Target=C:\archiv"
04.
set Prefix=000
05.
set Delim=_
06.
set Ext=.dat
07.

08.
for /f "tokens=2 delims=%Delim%." %%i in ('dir /b /on "%Target%\%Prefix%%Delim%*%Ext%"') do set N=%%i
09.
for /f "tokens=2 delims=%Delim%." %%i in ('dir /b /on "%Source%\%Prefix%%Delim%*%Ext%"') do call :ProcessFile %%i
10.
goto :eof
11.

12.
:ProcessFile
13.
set /a N+=1
14.
set "No=00000%N%"
15.
move "%Source%\%Prefix%%Delim%%1%Ext%" "%Target%\%Prefix%%Delim%%No:~-3%%Ext%"
Anmerkung: Die Stellenanzahl (3) für die laufende Nummer habe ich (in der letzten Zeile) konstant eingetragen, um nicht "delayedexpansion" verwenden zu müssen.

Grüße
bastla
Bitte warten ..
Mitglied: Biber
29.01.2008 um 14:41 Uhr
Moin bastla,

[Fussnote]

Einen Unterschied bzw. einen Grund zur Unterscheidung von
01.
..
02.
set Prefix=000
03.
set Delim=_
04.
..
...gibt es aber nicht, oder?

01.
set "Prefix=000_"
...wäre doch viel ressourcen- und damit klimaschonender. Oder übersehe ich etwas?
Bitte warten ..
Mitglied: bastla
29.01.2008 um 14:50 Uhr
@Biber

Einen Unterschied bzw. einen Grund zur Unterscheidung von ...gibt es aber nicht, oder?
Da ich %Delim% in den Schleifen verwende, eigentlich doch - insofern vielleicht eher
01.
set Part=000
02.
set Delim=_
03.

04.
set Prefix=%Part%%Delim%
Grüße
bastla
Bitte warten ..
Mitglied: minicoop
29.01.2008 um 15:30 Uhr
hallo bastla,

sieht gut aus. vielen dank an euch alle.
bau jetzt noch ein wenig drumherum und bin dann fertig.

gruss
Bitte warten ..
Mitglied: minicoop
29.01.2008 um 16:51 Uhr
hallo bastla,

korrektur.
irgendwas scheint bei mir nicht ganz zu stimmen..

ist im target verzeichnis nichts drin, werden die dateien alle rübergemoved.
nehme ich dann meine 4 dateien aus dem target verzeichnis und kopiere sie nochmal ins source
verzeichnis und führe das script erneut aus, dann moved er mir die dateien korrekt rüber.
im ziel verzeichnis sind dann 000_001.dat bis 000_008.dat
nehme ich dann die acht dateien und kopier sie erneut ins source verzeichnis und führe das script aus,
werden die vorhandenen acht dateien dann überbügelt, nicht "hintendrangehängt"
komisch..
weisst du da einen rat ?
Bitte warten ..
Mitglied: bastla
29.01.2008 um 17:06 Uhr
Hallo minicoop!

Ändere die Zeile
01.
for /f "tokens=2 delims=%Delim%." %%i in ('dir /b /on "%Target%\%Prefix%%Delim%*%Ext%"') do set N=%%i
auf die folgenden Zeilen:
01.
for /f "tokens=2 delims=%Delim%." %%i in ('dir /b /on "%Target%\%Prefix%%Delim%*%Ext%" 2^>nul') do set N=1%%i
02.
set /a N-=1000
03.
if %N% lss 0 set N=0
Erklärung: MS hatte die Königsidee, Oktalzahlen mit dem Präfix "0" zu versehen - daher werden "000" bis "007" richtig interpretiert, "008" aber nicht mehr. Das Ergebnis: Die höchste Zahl wird mit 0 ermittelt, und daher beginnt die Zählung von vorne und die vorhandenen Dateien werden überschrieben.

Solltest Du irgendwann mit dreistelligen Nummern nicht mehr auskommen, müsstest Du auch die Zeile
01.
set /a N-=1000
auf die höhere Stellenanzahl anpassen.

Grüße
bastla
Bitte warten ..
Mitglied: miniversum
29.01.2008 um 17:54 Uhr
Erklärung: MS hatte die Königsidee, Oktalzahlen mit dem Präfix "0" zu versehen
Ich glaub diese Idee stamt nicht von MS ;) . Das wurde denk ich mal eher aus Kompartiblitätsgründen übernommen.
Bitte warten ..
Mitglied: minicoop
29.01.2008 um 18:02 Uhr
hallo bastla,

vielen dank, jetzt sieht es besser aus.
hab jetzt nur noch ein letztes anliegen.
wenn ich
set "Source=C:\temp" ändere auf z.b.
set "Source=C:\Program Files" findet das verzeichnis nicht mehr.
war eigentlich immer der meinung, wenn ich das verzeichnis in hochkommata angebe, kann man in batches damit arbeiten.
habe dann gedacht ich arbeite mit dem kurznamen, aber der geht auch nicht bei mir.
ich mach jetzt feierabend.
bis morgen,

gruss
nedim
Bitte warten ..
Mitglied: bastla
29.01.2008 um 18:13 Uhr
Hallo minicoop!

set "Source=C:\Program Files" findet das verzeichnis nicht mehr.
Sollte eigentlich kein Problem sein - bei mir funktioniert's (mit dem von mir geposteten Code). Stell doch bitte Deine momentane Batchversion herein ...

@miniversum
Ich glaub diese Idee stamt nicht von MS ;)
Na dann geht's mir doch gleich wesentlich besser damit ...

Grüße
bastla
Bitte warten ..
Mitglied: minicoop
30.01.2008 um 11:15 Uhr
Guten Morgen,

anbei die batch..
wie gesagt, wenn ich meine quelle ändere, läuft sie durch. nehme ich meinen usb stick, geht nix..
01.
@echo on & setlocal
02.

03.
REM Variablen setzen
04.

05.
set "quelle=E:\externe Daten"
06.
set "temp=C:\umbennen"
07.
set "ziel=C:\Archiv"
08.
set Prefix=000
09.
set Delim=_
10.
set Ext=.dat
11.

12.
REM Prüfung ob Ziel überhaupt vorhanden
13.
if exist %quelle%\*%EXT% GOTO :LOS
14.
GOTO :eof
15.

16.
:LOS
17.
REM und los ..
18.
echo "Daten werden uebertragen.. Bitte warten"
19.
c:
20.
REM Daten werden erstmal weggemoved da quelle zu langsam.
21.
if exist "%quelle%\*%EXT%" FOR /F "usebackq eol=; tokens=1,2* delims=: " %%i in (`Time /T`) do move "%quelle%\*%EXT%" %temp%
22.

23.
cd %ziel%
24.
REM Zielverzeichnis wird angelegt wenn nicht schon existent im format YYYY\MM.YYYY\TT
25.
if exist "%temp%\*%EXT%" FOR /F "usebackq eol=; tokens=2,3,4* delims=. " %%i in (`Date /T`) do if not exist %%k\%%j.%%k\%%i mkdir %%k\%%j.%%k\%%i
26.
FOR /F "usebackq eol=; tokens=2,3,4* delims=. " %%i in (`Date /T`) do cd %%k\%%j.%%k\%%i
27.
FOR /F "usebackq eol=; tokens=2,3,4* delims=. " %%i in (`Date /T`) do set ziel1=%%k\%%j.%%k\%%i
28.

29.
for /f "tokens=2 delims=%Delim%." %%i in ('dir /b /on "%ZIEL%\%ZIEL1%\%Prefix%%Delim%*%Ext%" 2^>nul') do set N=1%%i
30.
set /a N-=1000
31.
if %N% lss 0 set N=0
32.
for /f "tokens=2 delims=%Delim%." %%i in ('dir /b /on "%temp%\%Prefix%%Delim%*%Ext%"') do call :ProcessFile %%i
33.
goto :eof
34.

35.
:ProcessFile
36.
set /a N+=1
37.
set "No=00000%N%"
38.
move "%temp%\%Prefix%%Delim%%1%Ext%" "%ziel%\%ziel1%\%Prefix%%Delim%%No:~-3%%Ext%"
Gruss
Nedim
Bitte warten ..
Mitglied: Biber
30.01.2008 um 11:27 Uhr
Moin Nedim,

schau Dir mal am CMD-Prompt die Hilfen zu "cd" und "PopD/PushD" jeweils mit "help cd" bzw "help pushd" etc. an.

Und ändere dann die Zeile
cd %ziel%
in
PushD "%ziel%"
...oder wenigstens (zweite Wahl) in ...
cd /d %ziel%

Aber versuch erst zu verstehen, was der Unterschied ist... sonst noch mal nachfragen.

Grüße
Biber
Bitte warten ..
Mitglied: minicoop
30.01.2008 um 15:10 Uhr
sorry biber,
hat ein wenig länger gedauert.
das mit der erweiterten shell war mir noch nicht bekannt..
muss doch gleich mal danach googlen was damit noch alles geht..
script funktioniert jetzt einwandfrei, bis auf die abfrage

REM Prüfung ob Ziel überhaupt vorhanden
if exist %quelle%\*%EXT% GOTO :LOS
GOTO :eof
das mag er irgendwie nicht so wirklich.
habe das jetzt weggemacht und er rennt durch.

wenn ich jetzt irgendwann auf 000_wxyz.dat gehen würde,
müsste ich set /a N-=1000 anpassen wie bastla geschrieben hat ?

Gruss
Nedim
Bitte warten ..
Mitglied: bastla
30.01.2008 um 15:32 Uhr
Hallo minicoop!

wenn ich jetzt irgendwann auf 000_wxyz.dat gehen würde, müsste ich set /a N-=1000 anpassen
Soferne Du mit "wxyz" vierstellige Nummern meinst: ja. Anzupassen wäre die "set"-Zeile auf
01.
set /a N-=10000
und die "move"-Zeile wäre dann
01.
move "%temp%\%Prefix%%Delim%%1%Ext%" "%ziel%\%ziel1%\%Prefix%%Delim%%No:~-4%%Ext%"
die abfrage ... REM Prüfung ob Ziel überhaupt vorhanden
... hätte ich zwar umgekehrt formuliert, also
01.
if not exist "%Quelle%\*%Ext%" goto :eof
aber wenn's nicht an den fehlenden Anführungszeichen gelegen sein sollte, wüsste ich im Moment auch nicht, wo's klemmt ...

Du könntest aber einmal ein "echo" vor die Zeile schreiben - dann wird sie nur angezeigt, und Du siehst hoffentlich, woran es scheitert.

Grüße
bastla
Bitte warten ..
Mitglied: minicoop
30.01.2008 um 16:00 Uhr
Hallo bastla,

das passt jetzt alles.
vielen dank für eure hilfe.
ich schliess dann mal den vorfall.

Gruss
Nedim
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
BATCH ini Datei Datei auslesen
gelöst Frage von Juergen42Batch & Shell2 Kommentare

Hallo zusammen, ich möchte eine ini Datei auslesen mit folgenden Aufbau INHALT DER INI ID=30 NAME="test1" PFAD="K:\Kontoauszug\Test1\*.pdf" PFAD_S="K:\Kontoauszug\Test1\Sicherung\" ID=28 ...

Viren und Trojaner
MPSigStub Datei
gelöst Frage von marilene1Viren und Trojaner2 Kommentare

Hallo, ich habe seit einigen Tage eine Datei MPSigStub. Ich kann es leider nicht löschen, da ich keine Berechtigung ...

Batch & Shell
SMIME Datei
gelöst Frage von mero59Batch & Shell4 Kommentare

Hallo liebes Forum, ich hab da mal folgendes Problem: ich überwache mit Powershell und EWS ein Funktionspostfach, d. h. ...

Batch & Shell

exe Datei zum Öffnen einer anderen Datei

gelöst Frage von Amateur01Batch & Shell15 Kommentare

Hallo, ich ein kompletter Anfänger, der ein kleines Programm schreiben wollte, um einen Löschvorgang zu automatisieren. Irgendwann hatte ich ...

Neue Wissensbeiträge
Windows 10

Windows 10 kann XPS erzeugen aber nicht anzeigen ????

Erfahrungsbericht von Deepsys vor 12 StundenWindows 10

Heute schickt mir ein Kollegen eine E-Mail mit einer XPS-Datei vom Kunden im Anhang und fragt wie er diese ...

Exchange Server

1und1 IONOS: Probleme beim Mailversand mit Exchange

Information von reksierp vor 22 StundenExchange Server3 Kommentare

Hallo, seit Do, 17.1.19 etwa Mittags nimmt 1und1 IONOS keine Mails mehr über den Standard-Port SMTP 25 an. Nachdem ...

LAN, WAN, Wireless

Cisco Mikrotik VPN Standort Vernetzung mit dynamischem Routing

Anleitung von aqui vor 1 TagLAN, WAN, Wireless

1. Allgemeine Einleitung Das nachfolgende Tutorial ist eine Fortführung der hier bei Administrator.de schon bestehenden VPN Tutorials und beschreibt ...

Windows Mobile

Support für Windows Mobile endet im Dezember 2019

Information von transocean vor 2 TagenWindows Mobile

Moin, Microsoft empfiehlt als Alternative den Umstieg auf iOS oder Android, wie man hier lesen kann. Gruß Uwe

Heiß diskutierte Inhalte
LAN, WAN, Wireless
Temporäre WLAN Verbindung für AD-Login
Frage von Christian.WidauerLAN, WAN, Wireless17 Kommentare

Hallo zusammen, ich weiß leider nicht unter welchem Begriff ich dafür suchen muss, daher habe ich bisher leider nichts ...

Windows Server
MSSQL Backup in Form von .sql einspielen
Frage von janosch12Windows Server14 Kommentare

Guten Morgen, wir verwenden das Tool SQLandFTPBackup ( ) zum sichern einiger MSSQL Datenbanken. Nun sichert das Toll die ...

Netzwerkmanagement
Reverse Proxy für TCP und UDP Anfragen
gelöst Frage von flxklsNetzwerkmanagement14 Kommentare

Hallo zusammen, ich besitze einen Rootserver, der nur eine öffentliche IP besitzt und auf dem mehrere VMs laufen. Da ...

Microsoft Office
Office 2016 oder Office 2019
Frage von PeterzMicrosoft Office13 Kommentare

Hallo zusammen, wir müssen unser Office von 2010 auf eine neuere Version Umstellen. Jetzt stellt sich die Frage, ob ...