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

SaveAs Filenamen via 2 Listen steuern (Batch)?

Frage Entwicklung Batch & Shell

Mitglied: DJPeti

DJPeti (Level 1) - Jetzt verbinden

02.10.2012, aktualisiert 15:26 Uhr, 1951 Aufrufe, 5 Kommentare

Hi
Ich bin so ziemlich neu hier und habe dank diesem "Forum" schon einiges über Batch und vermutlich auch vb gelernt beim Durchstöbern. Danke erstemals Allen, die hier so fleissig Fragen beantworten.
Bisher konnte ich meine "Probleme" lösen mit Excel VB und Batch.
Nun komme ich hier nicht mehr weiter:

Folgendes Problem:

Ich habe mehrere Files, deren Inhalt ich übernehmen will, der Filename soll jedoch geändert werden (und das via Save As):

Beispiel:

"Text_164503.txt" soll zu "Text_001.txt" werden.
"Text_168987.txt" soll zu "Text_002.txt" werden

Da hab ich mir gedacht, ich könnte das mit Hilfe eines Batch Scriptes und 2 Textlisten lösen:

In Liste 1 stehen die Namen der bestehenden Files
1.txt:

1056874
6549879
6548542
...

IN Liste 2 stehen die neuen Namen:
2.txt:

001
002
003
...


Was ich jetzt möchte ist, dass ich aus der ersten Liste auslese, welche Files kopiert werden. Die 2te Liste sollten die neuen Filenamen sein, die genau jeweils dem richtigen File in der ersten Liste zugestellt werden:

1056874 soll also zu 001 werden

6549879 zu 002 etc.



Hier meine Überlegung (die Falsch ist und leider nicht wunschgemäss funktioniert):

_______________________________________________________________
01.
@echo off 
02.
:1 
03.
 
04.
echo Files will be placed in C:\Temp\... 
05.
 
06.
set /p folder=Please enter folder for new Files C:\temp\: 
07.
 
08.
md c:\temp\%folder% 
09.
 
10.
 
11.
for /f %%i in (1.txt) do call :arbeiten %%i 
12.
 
13.
:arbeiten 
14.
 
15.
for /f %%a in (2.txt) do copy c:\Temp\Texte\Text_%%i.txt c:\Temp\%folder%\Text_%%i.def_%%a.txt 
16.
pause 
17.
 
_______________________________________________________________

Irgendwie klappt das Ganze, allerdings werden alle Files mehrmals wieder überschrieben und man hat keine chance um das zu unterbrechen. Somit habe ich ALLE neuen Namen bzw. txt Files, jedoch steht überall der Inhalt vom ersten File drin.

Hat jemand eine Idee wie das klappen könnte?
Das Ganze kann auch via Backup, Rename und Rückkopie gemacht werden. Allerdings bring ich es nicht fertig, das File X genau Name Y bekommt, was genau das Entscheidende ist.

Vielen Dank.

Mit freundlichen Grüßen Peti

[Edit Biber] Codeformatierung nachgezogen, weil es gar nicht lesbar war. [/Edit]
Mitglied: Biber
02.10.2012 um 15:32 Uhr
Moin DJPeti,

willkommen im Forum.

Mit zwei spiralförmig umeinander kreisenden Listen machst du dir die Arbeit unnötig schwer.

Prüfe erstmal, ob eine der folgenden varianten für deine Anforderung machbar ist:
  • entweder EINE Textdatei, die je Zeile <<"Altername"; "NeuerName">> enthält
  • oder EINE Textdatei, die nur <<"AlterName">> je Zeile enthält und die Nummerierung erfolgt fortlaufend ("001", "002" etc)

Grüße
Biber
Bitte warten ..
Mitglied: bastla
02.10.2012, aktualisiert um 18:13 Uhr
... sehe ich grundsätzlich auch so - obwohl frei nach Friemler:
01.
@echo off & setlocal 
02.
<2.txt (for /f "delims=" %%i in (1.txt) do ( 
03.
    set "Alt=%%i" 
04.
    set /p "Neu=" 
05.
    setlocal enabledelayedexpansion 
06.
    echo ren "!Alt!.txt" "!Neu!.txt" 
07.
    endlocal 
08.
))
[Edit] So angepasst, dass sowohl in "1.txt" als auch in "2.txt" Namen mit "!" enthalten sein dürfen. [/Edit]

Grüße
bastla
Bitte warten ..
Mitglied: Biber
02.10.2012, aktualisiert um 18:37 Uhr
Moin bastla,

ja nee... sehr hybsch und ja durchaus robust.

Aber:
WTF sollte jemand im realen Leben so arbeiten wollen oder müssen, dass links eine 58119-Zeilen-Plaintext-Datei mit einem "AltNamen" pro Zeile rumliegt und dieser Jemand in eine neue zweite Plaintext-Datei (auf einem anderen Laufwerk vielleicht?) 58119 Zeilen mit "NeuNamen" eintippselt?

Das würde bei normal belastbaren Individuen in Zeile 194 schiefgehen - bei mir wäre spätestens in Zeile 23 Schicht.

Oder wenn dich in 2 Monaten der Cheffe anmailt mit "Du hast doch neulich die Datei "Heinz.txt" umbenannt - wie heisst die Datei denn heute?" - lässt du dich dann von deiner Outlook-Abwesenheitsassistentin verleugnen?

Ich würde nicht alles so ungestüm umsetzen, was nicht explizit gegen geltende Naturgesetze verstösst... oder zumindest einen Plan B ins Gespräch bringen.

Grüße
Biber
Bitte warten ..
Mitglied: bastla
02.10.2012, aktualisiert um 22:06 Uhr
Hallo Biber!

Sehe ich weiterhin auch so (aber ein wenig Spielen muss manchmal sein ) - wobei nach einer Umbenennung auf laufende Nummer der ursprüngliche Dateiname wohl kein Thema mehr sein dürfte; wenn das also wirklich so geplant ist, wäre die Datei "2.txt" nur eine Krücke - und die braucht's dann ja gar nicht:
01.
@echo off & setlocal 
02.
set /a Nr=1001 
03.
 
04.
for /f "delims=" %%i in (1.txt) do ( 
05.
    set "Alt=%%i" 
06.
    setlocal enabledelayedexpansion 
07.
    echo ren "%Alt%.txt" !Nr:~-3!.txt 
08.
    endlocal 
09.
    set /a Nr+=1 
10.
)
Grüße
bastla
Bitte warten ..
Mitglied: DJPeti
03.10.2012 um 10:05 Uhr
Danke euch!

Funktioniert einwandfrei.

Habe mittlerweile selber nochmals bisschen ausprobiert und sowas hier gebastelt:

Inhalt 1.txt (aus Excel mit vb exportiert):

21010001_1400002 1400002 1400002_21010001
21010002_1400003 1400003 1400003_21010002
21010003_1400004 1400004 1400004_21010003

01.
@echo off 
02.
 
03.
set /p folder=Please enter folder for new Files C:\temp\: 
04.
 
05.
md c:\temp\%folder% 
06.
 
07.
 
08.
FOR /F "tokens=1 delims=_ " %%a IN (1.txt) do for /f "tokens=2 delims= " %%b IN (1.txt) do if not exist C:\Temp\%folder%\%%b_%%a.txt copy C:\Temp\%%a.txt c:\Temp\%folder%\%%b_%%a.txt 
09.
pause 
10.
 
11.
FOR /F "tokens=3 delims= " %%x IN (1.txt) do copy C:\temp\%folder%\%%x.txt C:\Temp 
12.
 
13.
 
14.
for /F "delims=" %%i in ('dir /b /a-D *.txt') do (for /F "delims=_" %%m in ('echo %%i') do ren "%%i" "%%m%%~xi") 
15.
pause 
16.
 
17.
 
Alle files werden erstellt (auch die unnötigen, die ich irgendwie mit dieser Schleife nicht umgehen kann). Dann werden die "richtigen" aussortiert und vom Temporären Ordner in den Überordner kopiert und dann wird der Name wieder gekürzt.

Funktioniert einigermassen, aber ist unnötig lang.
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Router & Routing
Spielzeiten auf pc und handy steuern (7)

Frage von fisch56 zum Thema Router & Routing ...

Batch & Shell
Dateinamen nach Zeichnen abschneiden - Batch-Shell (9)

Frage von cberndt zum Thema Batch & Shell ...

Batch & Shell
CMD Verschlüsslung ( Batch ) (11)

Frage von clragon zum Thema Batch & Shell ...

Batch & Shell
gelöst älteste dateien via batch löschen (6)

Frage von cali169 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...

Microsoft Office
Keine Updates für Office 2016 (11)

Frage von Motte990 zum Thema Microsoft Office ...