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

Mit einer Batch Text in andere Batchdateien einfügen

Frage Entwicklung Batch & Shell

Mitglied: GordonS

GordonS (Level 1) - Jetzt verbinden

11.12.2012, aktualisiert 10:28 Uhr, 2269 Aufrufe, 11 Kommentare

Hallo,

vorab schon einmal Danke für eure Mühe

Ich brauche eigentlich nur eine kleine Batchdatei, mit der ich einen bestimmten Text (abc), in eine andere Batchdatei einfügen kann.

Kurze Erläuterung:

wir haben eine "user.bat" welche beim Systemstart jedes Benutzers ausgeführt wird und die Netzlaufwerke verbindet, die User.bat können zum Teil unterschiedlich sein( versch. Laufwerke etc). Nun möchte ich einen weiteren Befehl am Ende der Batch hinzufügen, da ich das aber nicht > 100mal per Hand eintragen möchte, brauche ich eine Batch die das für mich erledigt, desweiteren wird das auch nicht das letzte Mal sein das etwas an allen user.bat Dateien geändert werden muss. Nun kommt mein eigentliches Problem die Batch Dateien sind in versch. Ordnern (Bsp: Netzlaufwerk/Schmitt, Netzlaufwerk/Müller, Netzlaufwerk/Baum etc).

Vielen Dank

Mit freundlichen Grüßen

Klaus Fischer
Mitglied: Hitman4021
11.12.2012 um 13:49 Uhr
Hallo,

nur mal so als Idee.

Du legst dir auf C:\Login.txt eine Liste mit den Pfaden zu allen Login Scripts an.
Dann nimmst du dir eine Batch File die ca. so aussieht (ungetestet und @bastla wird sicher bald eine schönere Variante posten)
01.
@ECHO OFF && setlocale 
02.
FOR /F %%p IN (C:\Login.txt) DO ( 
03.
    echo "BESTIMMTER TEXT" >> %%p 
04.
)
Gruß
Bitte warten ..
Mitglied: GordonS
11.12.2012, aktualisiert um 14:01 Uhr
Danke, zumindest schonmal eine Idee, falls gar nichts mehr geht

Anbei meine ersten Versuche:

Aus anderen Fragestellungen zusammengebaut.. funktioniert natürlich nicht...

@ echo off
FOR /F "delims=*" %%A IN ('dir /b /s user.bat') do (
echo abc>>user.bat
Bitte warten ..
Mitglied: Hitman4021
11.12.2012, aktualisiert um 14:11 Uhr
Hallo,

Zitat von GordonS:
Danke, zumindest schonmal eine Idee, falls gar nichts mehr geht

Anbei meine ersten Versuche:

Aus anderen Fragestellungen zusammengebaut.. funktioniert natürlich nicht...
For Schleifen sind nicht deins oder? ;)
Innerhalb der Schleife benutzt du die Variable "%%A".
Und du musst den Anweisungsblock immer schließen.
Und warum hast du ein Trennzeichen (delims=*) eingebaut?

Also könnte deine Datei so etwa funktionieren
01.
@ echo off && setlocal 
02.
FOR /F %%A IN ('dir /b /s user.bat') do ( 
03.
    echo "DEIN TEXT" >> %%A 
04.
)
Hier kannst du sonst auch nachschauen, die Seite ist relativ gut.
http://de.wikibooks.org/wiki/Batch-Programmierung:_Batch-Befehle

Gruß

PS.: Und bitte die < code > < /code > Tags benützen. Ohne Leerzeichen
Bitte warten ..
Mitglied: GordonS
11.12.2012 um 14:57 Uhr
Yuhuu es funktioniert!

Was jetzt noch sehr nützlich wäre, wenn der Batch vorher überprüft ob der Text evtl. schon vorhanden ist.
Falls ja = nichts machen
Falls nein = rein schreiben
Bitte warten ..
Mitglied: Hitman4021
11.12.2012, aktualisiert um 15:08 Uhr
Hallo,

01.
@ echo off && setlocal 
02.
FOR /F %%A IN ('dir /b /s user.bat') do ( 
03.
    findstr "DEIN TEXT" %%A && set vorhanden=TRUE 
04.
    if "%vorhanden%" == "TRUE" ( 
05.
    echo "DEIN TEXT" >> %%A 
06.
    ) else ( 
07.
    echo "Schon vorhanden" 
08.
09.
)
So in etwa?

Gruß
Bitte warten ..
Mitglied: Friemler
11.12.2012, aktualisiert 16.12.2012
Hallo Hitman,

nee, nee, so wird dat nüscht. Du hast da die Besonderheiten beim Erweitern von Variablen seitens des Batchscript-Interpreters und einige andere gemeine Details ausser Acht gelassen.

Die Variable vorhanden wird innerhalb der FOR-Schleife verändert und verwendet, ohne die verzögerte Variablenerweiterung einzuschalten (setlocal enabledelayedexpansion) und zu nutzen (statt %vorhanden% schreibt man dann !vorhanden!).

Das ist aber auch garnicht nötig, es geht auch per bedingte Befehlsausführung:
01.
@echo off & setlocal 
02.
 
03.
set "BaseDir=Startverzeichnis" 
04.
set "BatchFile=user.bat" 
05.
set "SearchStr=Dein Text" 
06.
 
07.
for /f "delims=" %%a in ('dir /s /b "%BaseDir%\%BatchFile%" 2^>NUL') do ( 
08.
  findstr /i /c:"%SearchStr%" "%%a" 1>NUL 2>NUL || ( 
09.
    >>"%%a" (set /p "=%SearchStr%" <NUL & echo.) 
10.
11.
)
Der SET-Befehl in Zeile 9 dient der Ausgabe des gewünschten Textes in die Datei. Durch das Einschließen des Textes (in der Variablen SearchStr) in Anführungszeichen kann der Text auch Zeichen enthalten, die zum Sprachumfang von Batchscript gehören, ohne dass der Batchscript-Interpreter ins Trudeln kommt. In einigen Fällen kann das trotzdem passieren, deshalb benutze ich für solche Anwendungsfälle lieber VBScript.

Die Option "delims=" sollte man beim Verarbeiten von unbekannten Pfaden/Dateinamen durch eine FOR-Schleife immer benutzen, sonst kommt es bei Pfaden/Dateinamen, die Leerzeichen enthalten, zu einem "Datei nicht gefunden"-Fehler (Leerzeichen sind die Standard-Trennzeichen für den Tokenizer der FOR-Schleife), der ohne das 2^>NUL hinter dem DIR-Befehl auch dazu führen würde, dass die FOR-Schleife im Fehlerfall ausgeführt wird - die Laufvariable hätte dann eben den Wert "Datei" und diese Datei würde dann der FINDSTR-Befehl in der Schleife wiederum garantiert nicht finden.

Damit der FINDSTR-Befehl auch dann brav nach dem Suchbegriff als ganzem sucht, wenn der Suchbegriff Leerzeichen enthält, ist der Suchbegriff hinter dem Parameter /c: angegeben. Ansonsten interpretiert FINDSTR durch Leerzeichen separierte Wörter als eine Liste von Suchbegriffen => Ist einer davon in der zu durchsuchenden Datei vorhanden, liegt ein Treffer vor.

Die Ausgaben und Fehlermeldungen von FINDSTR interessieren nicht, deshalb wird mit 1>NUL die Standardausgabe und mit 2>NUL der Standardfehlerkanal ins Nirvana umgeleitet.

Wenn beim Suchbegriff Groß-/Kleinschreibung unterschieden werden soll, muss der Parameter /i beim FINDSTR-Befehl entfernt werden.

Die folgenden ||-Zeichen bewirken dann die bedingte Befehlsausführung - nur wenn der unmittelbar vorhergehende Befehl (hier FINDSTR) fehlgeschlagen ist, wird der Befehl in Zeile 9 ausgeführt. Das echo. dient übrigens zum Schreiben eines Zeilenumbruchs in die Ausgabedatei, da der SET-Befehl das nicht macht.

Gruß
Friemler
Bitte warten ..
Mitglied: GordonS
12.12.2012 um 10:44 Uhr
Hallo Friemler,

vielen Dank für deine wahnsinnig gute Erklärung. Aber leider mach ich wohl immer noch was falsch.

Ich lege diese Batch (Test.bat) in mein Netzlaufwerk(L:/Netzlaufwerk/Test.bat), wo auch die Userordner inkl. user.bat(L:/Netzlaufwerk/Schmitt/user.bat) liegen.

01.
@echo off & setlocal 
02.
 
03.
set "BaseDir=Startverzeichnis" 
04.
set "BatchFile=user.bat" 
05.
set "SearchStr=q:\edv\erstinstallation\bginfo\bginfo.exe q:\edv\erstinstallation\bginfo\td.bgi /TIMER:00" 
06.
 
07.
for /f "delims=" %%a in ('dir /s /b "%BaseDir%\%BatchFile%" 2>NUL') do ( 
08.
  findstr /i /c:"%SearchStr%" "%%a" 1>NUL 2>NUL || ( 
09.
    >>"%%a" (set /p "=%SearchStr%" <NUL & echo.) 
10.
11.
)
Bitte warten ..
Mitglied: Friemler
12.12.2012 um 17:09 Uhr
Hallo Klaus,

Deine Zeile 3 muss
set "BaseDir=L:\Netzlaufwerk"
lauten. Oder hast Du nur vergessen, es in Deinem Posting anzupassen?

Gruß
Friemler
Bitte warten ..
Mitglied: GordonS
13.12.2012 um 08:05 Uhr
Hallo Friemler,

hatte es lediglich vergessen im Posting anzupassen.

Gruß
GordonS
Bitte warten ..
Mitglied: Friemler
13.12.2012, aktualisiert um 16:49 Uhr
Hallo Klaus,

sorry, da ist mir das "Escapen" des > -Zeichens im Kopf der FOR-Schleife durch die Lappen gegangen.

Hier also nochmal die funktionierende Version:
01.
@echo off & setlocal 
02.
 
03.
set "BaseDir=L:\Netzlaufwerk" 
04.
set "BatchFile=user.bat" 
05.
set "SearchStr=q:\edv\erstinstallation\bginfo\bginfo.exe q:\edv\erstinstallation\bginfo\td.bgi /TIMER:00" 
06.
 
07.
for /f "delims=" %%a in ('dir /s /b "%BaseDir%\%BatchFile%" 2^>NUL') do ( 
08.
  findstr /i /c:"%SearchStr%" "%%a" 1>NUL 2>NUL || ( 
09.
    >>"%%a" (set /p "=%SearchStr%" <NUL & echo.) 
10.
11.
)
Gruß
Friemler
Bitte warten ..
Mitglied: GordonS
13.12.2012, aktualisiert 14.12.2012
Hallo Friemler,

brauchst dich für nichts zu entschuldigen, du hilfst mir sehr weiter. Danke nochmal.
Werde es morgen ausprobieren und dir ein Feedback geben ob es nun funktioniert.

edit 13.12.12

Hat wunderbar funktioniert.

Vielen Dank für eure Hilfe!!
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Microsoft Office
gelöst Wie kann man die Standard-Schriftart bei einfügen von Text in Word 2013 festlegen? (3)

Frage von Rene1976 zum Thema Microsoft Office ...

Batch & Shell
Text in neue 1. Zeile in Textdatei einfügen (4)

Frage von FuxxLi zum Thema Batch & Shell ...

Windows 7
Gruppenrichtlinie für User auf andere Rechner übertragen (1)

Frage von Robmantuto zum Thema Windows 7 ...

Heiß diskutierte Inhalte
Windows Tools
gelöst Aussendienst Datensynchronisierung (12)

Frage von lighningcrow zum Thema Windows Tools ...

Windows Server
Suche passender Treiber (12)

Frage von stolli zum Thema Windows Server ...

Peripheriegeräte
Wlan stört Funkmaus (11)

Frage von Falaffel zum Thema Peripheriegeräte ...

Peripheriegeräte
gelöst USB Festplatte verliert Laufwerksbuchstabe (9)

Frage von cese4321 zum Thema Peripheriegeräte ...