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

Probleme beim ändern einer Zeile in einer .ws Datei per Batch!

Frage Entwicklung Batch & Shell

Mitglied: OldRoadrunner

OldRoadrunner (Level 1) - Jetzt verbinden

25.10.2010 um 08:05 Uhr, 4297 Aufrufe, 7 Kommentare

Ich weiß das Thema ist abgegriffen. Es sind hier viele tolle Beiträge dazu geschrieben worden.
Leider reicht das scheinbar für mein Problem nicht aus.

Problem:

In unserem Hause wird Client Access für AS400 Sitzungen eingesetzt.
Nun haben wir unterschiedliche Versionen installiert.
Grundsätzlich kein Problem.
Leider gibt es immer Probleme wenn sich ein User an einer älteren Version anmeldet wenn er vorher
an einen Rechner gesessen hat der eine neuere Version der besagten Software hat.
Durch die Änderung eines einzelnen Wertes ( Version= ) kann man aber gleich wieder arbeiten.
Diesen Vorgang möchte ich aber automatisieren.
Hier ein kurzer Auszug aus der Konfig-Datei:

[Profile]
ID=WS
Version=8
[CT]
trace=Y
[Telnet5250]
..........................

Um die Probleme zu beheben müßte mein Programm nach "Version" suchen und nachschauen ob dort die "8" steht.
Wenn ja sollte der Wert auf "7" geändert werden.
Leider hatte ich mit einigen Beispielen keinen Erfolg oder komische Ergebnisse (z.B. "8=Version=8" ...etc)
Ich versuche mich da schon 4 Wochen und bin da echt am verzweifeln da ich wenig Kenntnisse über die Einbundung von Variablen etc. habe.
Könnte mir jemand helfen und wenn ja mir das vollständige Skript (Batchprogramm) zur Verfügung stellen, da ich glaube das viele Beispiele hier nur Teile eines Programms sind.

Herzlichen Dank
Mitglied: laster
25.10.2010 um 09:14 Uhr
Hallo OldRoadrunner,

kein Problem, hier ein Javascript (aendern.js):
01.
var konfigdatei = "orginale-konfigdate.dat"; 
02.
var fp1 = OpenFile(konfigdatei, "r");   
03.
var konfiguration = fp1.ReadAll();  
04.
fp1.Close(); 
05.
 
06.
var konfigdateineu = "veraenderte-konfigdatei.dat" 
07.
var fp2 = CreateFile(konfigdateineu); 
08.
 
09.
var zeilen = konfiguration.split("\r\n"); 
10.
 
11.
for (i = 0; i < zeilen.length; i++) { 
12.
  if (zeilen[i].indexOf("Version=8") == 0) { 
13.
    fp2.WriteLine("Version=7"); 
14.
  } else { 
15.
    fp2.WriteLine(zeilen[i]); 
16.
17.
18.
 
19.
fp2.Close(); 
20.
 
21.
// Hilfsfunktionen 
22.
 
23.
/** Open TextDatei. 
24.
 * @param name String kompletter Dateiname 
25.
 * @return tf  Objekt FilePointer 
26.
 */ 
27.
function OpenFile(name, mod) { 
28.
  var fso, tf, mode; 
29.
  if (mod == "r") { 
30.
    mode = 1; 
31.
  }   
32.
  if (mod == "w") { 
33.
    mode = 2; 
34.
  }   
35.
  if (mod == "a") { 
36.
    mode = 8; 
37.
  }   
38.
  fso = new ActiveXObject("Scripting.FileSystemObject"); 
39.
  tf = fso.OpenTextFile(name, mode); 
40.
  return tf; 
41.
42.
 
43.
/** Create TextDatei. 
44.
 * @param name String kompletter Dateiname 
45.
 * @return tf  Objekt FilePointer 
46.
 */ 
47.
function CreateFile(name) { 
48.
  var fso, tf; 
49.
  fso = new ActiveXObject("Scripting.FileSystemObject"); 
50.
  tf = fso.CreateTextFile(name, true); 
51.
  return tf; 
52.
}
am Ende muss die neu erstellte Datei noch umkopiert werden:

01.
@echo off 
02.
cscript /nologo aendern.js 
03.
copy /Y veraenderte-konfigdatei.dat orginale-konfigdate.dat 
04.
:: Starte Dein Client Access für AS400 Programm
vG
LS
Bitte warten ..
Mitglied: OldRoadrunner
25.10.2010 um 09:38 Uhr
Danke Dir.
Wie rufe ich das den jetzt auf.
Habe es schon angepaßt.
Die Clients müssen das beim Anmelden per Script automatisch aufrufen.
Zum Glück liegt die zu ändernde Datei im Ordner "Eigene Dateien".

Per Batch wäre mir das lieber , aber wenn es funktioniert ;o)
Gruß
AP
Bitte warten ..
Mitglied: laster
25.10.2010 um 09:43 Uhr
Wie rufe ich das den jetzt auf.
eine Batchdatei erstellen mit dem Inhalt der letzten 4 Zeilen aus obiger Antwort
vG
LS
Bitte warten ..
Mitglied: OldRoadrunner
25.10.2010 um 09:57 Uhr
Puhhhh................ das läuft nicht............... :o(

Eingabefehler: Für die Dateierweiterung ".js" gibt es kein Skriptmodul

So wird es warscheinlich an allen PC´s enden.
Bitte warten ..
Mitglied: laster
25.10.2010 um 10:02 Uhr
Was sind denn das für Clients?
Wenn das Windows-Clients sind (wenigstens W2k) kannst Du doch die Scriptmodule installieren, musst Du halt einmal machen.
LS
Bitte warten ..
Mitglied: bastla
25.10.2010 um 10:13 Uhr
Hallo OldRoadrunner und willkkommen im Forum!

Als Alternative noch eine "Batch-only"-Variante:
01.
@echo off & setlocal 
02.
set "Conf=%userprofile%\Eigene Dateien\Config.txt" 
03.
set "Von=Version=8" 
04.
set "Nach=Version=7" 
05.
 
06.
set "ZNr=" 
07.
for /f "delims=:" %%i in ('findstr /n /x /c:"%Von%" "%Conf%"') do set "ZNr=%%i" 
08.
if not defined ZNr goto :Starten 
09.
 
10.
move "%Conf%" "%Conf%.bak" 
11.
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" "%Conf%.bak"') do ( 
12.
    if "%%i" neq "%ZNr%" ( 
13.
        echo\%%j 
14.
    ) else ( 
15.
        echo\%Nach% 
16.
17.
)>>"%Conf%" 
18.
 
19.
:Starten 
20.
::Aufruf Client
In dieser Version wird die Konfig-Datei nur neu erstellt, wenn sie eine Zeile "Version=8" enthält (Achtung: wegen des "/x" beim "findstr" wird auf exakte Übereinstimmung der gesamten Zeile geprüft - falls es zB am Ende der Zeile noch ein oder mehrere Leerzeichen gäbe, könntest Du auch weniger genau mit "/b" nur nach dem Zeilenanfang suchen lassen). Die alte Datei verbleibt dabei mit dem Zusatz ".bak" als Sicherungskopie.

Bitte beachten: Ersetzt wird (in dieser Fassung) nur die letzte (falls es mehrere geben sollte) passende Zeile! [Edit] Außerdem wird bei Zeilen, welche mit einem ":" beginnen, dieser nicht in die neue Datei übernommen! [/Edit]

Kurze Erklärung zum Ablauf:
In einem ersten Suchlauf wird nach dem Suchbegriff lt Variable "%Von%" gesucht und, falls eine oder mehrere entsprechende Zeilen gefunden werden, die Zeilennummer der letzten Fundstelle in "%ZNr%" vermerkt.
Wurde keine passende Zeile gefunden, wird gleich das Client-Programm aufgerufen.

Ist die gesuchte Zeile enthalten, wird zunächst die Sicherungskopie erstellt (mit "move" wird dabei automatisch - in einem Batch ist für "move" und auch "copy" kein Schalter "/y" erforderlich - eine ev schon bestehende ältere Sicherung überschrieben) und dann aus dieser Datei alle (inkl Leerzeilen) Zeilen ausgelesen und, soferne es sich nicht um die zu ersetzende Zeile handelt, unverändert in die Konfig-Datei geschrieben. Das Auslesen aller Zeilen wird durch die Verwendung des Suchbegriffes "^" sichergestellt, da auch leere Zeilen einen "Zeilenanfang" haben. Mit der Schreibweise "echo\%%j" (es wären anstelle des "\" auch verschiedene andere Zeichen - häufig wird ein Punkt verwendet - möglich) wird sicher gestellt, dass eine Leerzeile nicht als "ECHO ist eingeschaltet (ON)." geschrieben wird.
Für die zu ersetzende Zeile wird anstelle des Originalinhaltes dann eben "%Nach%" geschrieben.

Nach Bearbeitung aller Zeilen wird das Clientprogramm gestartet

Grüße
bastla
Bitte warten ..
Mitglied: OldRoadrunner
25.10.2010 um 10:59 Uhr
Also ich bin echt begeistert.

@laster : Danke für Deine schnelle Hilfe. Das mit dem Java hätte sicher auch prima funktioniert wenn die Clients das unterstützt hätten.

@bastla : Cooles Ding das geht prima und ist schon integriert in das alltägliche Scripting.
Danke für die tolle Erklärung, damit kann selbst ich die Funktionen dieses Scriptes einigermaßen durchdringen ;o)

DANKESCHÖN!
Bitte warten ..
Neuester Wissensbeitrag
Microsoft

Lizenzwiederverkauf und seine Tücken

(5)

Erfahrungsbericht von DerWoWusste zum Thema Microsoft ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (17)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Windows Netzwerk
Windows 10 RDP geht nicht (16)

Frage von Fiasko zum Thema Windows Netzwerk ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...