Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

einzelnen Buchstaben entfernen mittels .bat Datei

Frage Entwicklung Batch & Shell

Mitglied: Kelevra

Kelevra (Level 1) - Jetzt verbinden

26.08.2008, aktualisiert 28.08.2008, 6944 Aufrufe, 20 Kommentare

guten tach,

ich brauche eine Batch-Datei die mir einzelne zeichen aus dateinamen löscht.
hier zur veranschaulichung ein Bsp was ich meine:

tezst4257365.001

soll werden zu

test4257356.001

es soll also bei allen Dateinen in einem ordner das 3 Zeichen löschen.
Denke mal ich muss zuert alle dateinamen einlesen und dann kann ich erst das gewünschte zeichen löschen.


wenn mir jmd sagenkönnte wie das geht währe ich sehr dankbar.


PS. es kommt auch vor das die ersten drei oder nur das zweite Zeichen weg soll.
das ändert je nach dem was für datensätze erstellt werden.

grüße
Mitglied: miniversum
26.08.2008 um 12:39 Uhr
Versuchs mal so:
01.
FOR /F "delims=" %%i in ('dir /b') do call :doren "%%~i" 
02.
goto:eof 
03.
 
04.
:doren 
05.
set "filename=%~1" 
06.
set "newfilename=%filename:~0,2%%filename:~3%" 
07.
ECHO rename "%filename%" "%newfilename%" 
08.
goto:eof
Bei jeder Datei wird das 3. Zeichen entfernt.
Die Einstellung dafür erfolgt in der 6. Zeile. "0,2" bedeutet dabei ab den 0. Zeichen die nächsten 2 Zeichen nehmen. Danach ab dem 3. Zeichen den rest. Also "Anfang,Länge". Genaueres kannst du nachlesen wen du in der Eingabeaufforderung "Set /?" eingibst.
Hier werden di Änderungen nur erstmal angezeigt. Wenns so past entferne das ECHO und es sollte wirklich umbenannt werden.
Bitte warten ..
Mitglied: kristov
26.08.2008 um 12:45 Uhr
Hallo,
Deine Anforderungen widersprechen sich. Erst schreibst Du, ein bestimmtes Zeichen soll gelöscht werden, dann schreibst Du wieder, ein Zeichen an einer bestimmten Position soll gelöscht werden. Das sind 2 verschiedene Dinge. Bei Deinem Beispiel wird das 4. Zeichen gelöscht, drunter bei der Erklärung des Beispiels schreibst Du aber, das 3. soll gelöscht werden.

Vllt. kannst Du das präzisieren. Ich denke, Du meinst, ein bestimmtes Zeichen soll, egal an welcher Stelle es steht, gelöscht werden (ich nehme an, auch wenn das Zeichen mehrfach vorkommen sollte). Richtig so?

lg,
kristov
Bitte warten ..
Mitglied: Kelevra
26.08.2008 um 12:57 Uhr
hi

erstmal vielen dank @miniversum
habe da aber noch eine kleine frage warum steht in zeile 2 goto:eof, springt man da nicht automatisch ans ende des scriptes? oder hab ich das nur falsch verstanden?

@kristov: hmm jo ich merks ich hab mich wohl entwas unglücklich formuliert, tut mir leid, aber danke das du mich drau aufmerksam macht
Bitte warten ..
Mitglied: bastla
26.08.2008 um 14:00 Uhr
Hallo Kelevra!

warum steht in zeile 2 goto:eof, springt man da nicht automatisch ans ende des scriptes?
So ist es, und das ist auch nötig, um nicht nochmals das Unterprogramm ";doren" zu durchlaufen - oder anders formuliert: Wenn die Zeile 2 erreicht ist, wurden durch die Schleife bereits alle Dateien verarbeitet - daher: habe fertig.

Grüße
bastla
Bitte warten ..
Mitglied: Kelevra
26.08.2008 um 14:45 Uhr
hmm,

also iwi wills grad net ganz durrchsickern bei mir was ist den "doren" , er sagt mir immer befehl doren kann nicht gefunden werden
^^ klärt einen unwissenden bitte auf was das macht. oder ist das der begin der routine und wird in zeile eins mit dem do doren an zeile 4 weitergeleitet?

grüße
Bitte warten ..
Mitglied: bastla
26.08.2008 um 14:49 Uhr
Hallo Kelevra!

Mit einem "call" davor wird's viel besser gehen:
01.
FOR /F "delims=" %%i in ('dir /b /a-d') do call :doren "%%~i" 
":doren" ist die Markierung für den Beginn des Unterprogrammes, das für jede einzelne Datei aufgerufen werden soll.

Grüße
bastla
Bitte warten ..
Mitglied: miniversum
26.08.2008 um 15:16 Uhr
Ups entshculdige.
Das kommt davon wenn man während dem diplomarbeitschreiben mal schnell noch was zusammentipt und es nicht testet.
Ich werds oben ändern.
Bitte warten ..
Mitglied: Kelevra
26.08.2008 um 15:18 Uhr
so herzlichsten dank an bastla und miniversum

funktioniert einwandfrei.

aber wie der teufel will, kam grad mein vorgesetzter und will jetz mehr ,
er will jetz nicht mehr zeichen entfernen , sondern die dateinein gleich für eine neue datenbank nutzbar machen.
das bedeutet ich muss die ersten drei zeichen durch andere zeichen ersetzen

bsp. aus gug1928384.001 mach sap1928384.001
die 3 auszutauschenden buchstaben sollten am besten durch eine eingabe ständig änderbar sein, oder man änderts einfach im script (was halt nicht so nutzerfreundlich ist)

tut mir leid das ich euch damit nötigen muss,

aber besten dank schonmal für eure mühe

vieleicht finde ich ja selber ein lösung :X glaube ich aber weniger



ok
das ging fix
FOR /F "delims=" %%i in ('dir /b /a-d') do call :doren "%%~i"
goto:eof

:doren
set "filename=%~1"
set "newfilename=sap%filename:~0,0%%filename:~3%"
rename "%filename%" "%newfilename%"
goto:eof

so siehts aus und es funktioniert allerdings benennt sich die datei selber mit um.
geht das einfach mit einer extrazeile rename zu ändern oder kann man das allgemein umgehen diese problem
Bitte warten ..
Mitglied: miniversum
26.08.2008 um 16:29 Uhr
Das einfachste ist es du vershciebst die Batch in ein anderes Verzeichnis. Dann änderst du die Zeile:
FOR /F "delims=" %%i in ('dir /b /a-d') do call :doren "%%~i"
in:
FOR /F "delims=" %%i in ('dir /b /a-d "C:\Dateien\*.*"') do call :doren "%%~i"
Wenn deine Dateien in C:\Dateien liegen sollten
Bitte warten ..
Mitglied: bastla
26.08.2008 um 18:04 Uhr
... oder Du nimmst durch
01.
if "%~nx1"=="%~nx0" goto :eof
als erste Zeile in ":doren" die Batchdatei selbst explizit von der Bearbeitung aus.

Grüße
bastla
Bitte warten ..
Mitglied: Kelevra
27.08.2008 um 08:35 Uhr
guten morgen

die idee von bastle gefällt mir besser, dass is genau was ich gern hätte
aber leider funktionierts nich bei mir, habs in :doren als erste zeile geschrieben aber es will nich. ^^ und kannste mir bitte erklären was es mit "%~nx1"=="%~nx0" auf sich hat, damit ich das auch verstehe was da in meiner datei steht

vieln dank

Mit freundlichen Grüßen
kelevra
Bitte warten ..
Mitglied: bastla
27.08.2008 um 09:12 Uhr
Hallo Kelevra!

... was es mit "%~nx1"=="%~nx0" auf sich hat ...
... kannst Du mit "for /?" (gegen Ende) auch nachlesen.

Das aufgerufene Unterprogramm ":doren" verhält sich im Prinzip wie ein eigener Batch, daher repräsentiert %0 die Batchdatei selbst, %1 bis maximal %9 verweisen auf die übergebenen Parameter.

Mit "%~nx0" lässt sich Name und Extension der Batchdatei, mit "%~nx1" das selbe für die beim Aufruf übergebene aktuelle Datei lt "for"-Schleife ermitteln - bei Übereinstimmung soll keine Umbenennung erfolgen, daher sofort "goto :eof".

leider funktionierts nich bei mir
Warum das so sein sollte, kann ich mir eigentlich nicht vorstellen, aber lass einmal zur Kontrolle jeweils die entsprechenden Werte anzeigen, indem Du
01.
echo "%~nx0" 
02.
echo "%~nx1" 
03.
echo\
zwischen ":doren" und der "if"-Zeile einfügst.

Grüße
bastla
Bitte warten ..
Mitglied: Kelevra
27.08.2008 um 09:33 Uhr
also erstmal ein dickes danke für deine erklären, ich wurde erleuchtet

werde es gleich mal ausprobieren mit echo, aber zuerst gibts n käffchen,

wenns nicht klappt, was ich nich hoffe meld ich mich nochmal,

vielen dank für die mühe
Bitte warten ..
Mitglied: Kelevra
27.08.2008 um 10:03 Uhr
jetzt bin ich happy

danke für die hilfe

Mit freundlichen Grüßen
kelevra
Bitte warten ..
Mitglied: miniversum
27.08.2008 um 13:41 Uhr
Das aufgerufene Unterprogramm ":doren" verhält sich im Prinzip wie ein eigener Batch, daher repräsentiert %0 die Batchdatei selbst, %1 bis maximal %9 verweisen auf die übergebenen Parameter.

Daher würde im %0 auch ncith das name der Batch stehen sondern eben ":doren".

Wenn dann noch vor der For-Schleife ein
01.
set "exclude=%~nx0"
und dann im :doren
01.
if "%~nx1"=="%exclude%" goto :eof
oder die For-Schleife so gestalten:
01.
FOR /F "delims=" %%i in ('dir /b /a-d') do if "%~nx1" neq "%~nx0" call :doren "%%~i"
Bitte warten ..
Mitglied: bastla
27.08.2008 um 14:17 Uhr
@miniversum

Daher würde im %0 auch ncith das name der Batch stehen sondern eben ":doren".
Bezogen auf meine Aussage hast Du, rein sprachlich betrachtet (wobei allerdings die Einschränkung durch "im Prinzip" nicht ganz zufällig gewählt war), durchaus recht, allerdings ist auch das Unterprogramm ":doren" immer noch in einer Datei gespeichert, und deren Name steht als %0 zur Verfügung.

Gegen Deinen Lösungsansatz ist aber natürlich nichts einzuwenden ...

Grüße
bastla
Bitte warten ..
Mitglied: miniversum
27.08.2008 um 14:43 Uhr
Naja.. ich habs extra ausprobiert.
Folgende Batch liefert bei mri in den Zeilen mit "0" immer ":doren" und nicht den Dateinamen.
01.
@echo off 
02.
FOR /F "delims=" %%i in ('dir /b') do call :doren "%%~i" 
03.
goto:eof 
04.
 
05.
:doren 
06.
echo 0 %0 
07.
echo 1 %1 
08.
goto:eof
Bitte warten ..
Mitglied: bastla
27.08.2008 um 16:55 Uhr
@miniversum

Was Du aber nicht ausprobiert hast:
01.
echo 0 %~nx0 und auch %~f0
Insofern können wir uns vielleicht darauf einigen, dass "im Prinzip" das Unterprogramm ein eigener Batch ist, aber hinsichtlich der erweiterten Variablenauswertung dennoch Informationen über die es beinhaltende Datei liefert ...

Grüße
bastla
Bitte warten ..
Mitglied: Biber
28.08.2008 um 01:46 Uhr
Moin Alle,
<OT>
das gibt es nicht in allen Foren -
Expertentalk auch über doren.

</OT>

Irgendwie schön hier...

Grüße
Biber
Bitte warten ..
Mitglied: miniversum
28.08.2008 um 11:11 Uhr
Auch OT:
Ehrlich gesagt wär mir ein Expertentalk über Doreen lieber ;)
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Windows Server
gelöst Sichtbares Ausführen einer BAT-Datei mittels GPOs (10)

Frage von DasWombat1993 zum Thema Windows Server ...

Windows 7
gelöst Bat Datei erstellen für Homeroot (2)

Frage von leon22 zum Thema Windows 7 ...

Batch & Shell
Mehrere.csv Dateien zusammenfügen zu einer Datei mit bat (4)

Frage von Piotrney zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (17)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

DSL, VDSL
DSL-Signal bewerten (14)

Frage von SarekHL zum Thema DSL, VDSL ...