1.3k Aufrufe
Gefragt in Anwendungen(Java,C++...) von
Guten Tag,

ich habe mittlerweile alle möglichen Foren durchsucht aber nichts
passendes gefunden. Auch habe ich es schon mit 3 verschiedenen
Tools probiert aber komme auf keinen grünen Ast.

Ich muss für die Arbeit in den Logon-Scripten mehrere Server durch
andere ersetzten. Die Scripte sind alles .bat Datein.

Nun wäre es super wenn irgendjemand sich gut genug damit
auskennt um mir mit einer Batch Datei zu helfen welche den
Ordnern mit den Scripten durchsucht nach den alten Servern und
diese durch die neuen Pfade ersetzt.

z.B

1pfad alt: \\beispiel\1 -> \\beispiel_neu\1
2pfad alt: \\beispiel\2 -> \\beispiel_neu\2
3pfad alt: \\beispiel\3 -> \\beispiel_neu\3

Ich hoffe das war verständlich =)

4 Antworten

0 Punkte
Beantwortet von kicia Mitglied (939 Punkte)
Frage zum Verständnis:

(A) Soll einmalig in jeder .bat datei die Zeichenkette (der Pfad) permanent ersetzt
werden (also die Datei geändert werden), oder
(B) soll das Script regelmässig (bzw. wiederholt) mit geändertem
Pfad gestartet werden ?
(C) Oder sollen dynamisch erstellte Scripte wiederholt modifiziert werden?

Wenn es nur um das ersetzen geht, würden andere Tools/Methoden dafür in frage kommen.
(Wenn es nur einmalig ist, ist es evtl. sogar schneller damit erledigt, die Dateien mit Windows-Suchfunktion zu suchen, von Hand zu öffnen und mit "Suchen-und-Ersetzen" die Pfade zu ändern.)

Ordner durchsuchen zB.:
for /R %%i in (scriptname.bat) do @echo %%~ni
0 Punkte
Beantwortet von
A. Die Pfade in den Scripten sollen permanent ersetzt werden

Über mehrere Umwege habe ich das ganze schon per BTR Wizard geschafft. Da ist nur das Problem das es auf dem Arbeitsrechner nicht geht und blockiert wird und zudem das Programm nicht auf den Admin-Server zugreifen kann trotz richtiger Pfade und vollen Admin-rechten

Gruß
0 Punkte
Beantwortet von kicia Mitglied (939 Punkte)
Es gibt da ja umfangreiche möglichkeiten mit "for /F ...", batch ist aber auch nicht meine stärke.

Ich würds mit Windows Scripting Host machen.
Für den Fall, dass das für Dich in Frage kommt:

am einfachsten wärs wohl, mit batch eine liste zu erstellen:
for /R C:\temp %i in (*.bat) do @echo '%i',>>temp.txt

und den Inhalt von temp.txt in das script unten in die variable fileList zu kopieren, wobei backslashes zu forward-slashes konvertiert werden müssen. Das letzte Komma sollte gelöscht werden (siehe beispiel "var fileList ...").

Das script muss in einer datei mit der endung .js stehen, und kann dann mit wscript.exe xxx.js gestartet werden.

das script:
var fso = new ActiveXObject("Scripting.FileSystemObject");
var fileList = [
'C:/temp/datei.bat',
'C:/temp/datei2.bat'
];

main();

function main(){
var out = [], i = 0;
for( i = 0; i < fileList.length; i++ ){
out.push( fileList[i] );
editFile( fileList[i] );
}
msg( out.join('\n') );
}

function editFile( fname ){
var str = loadFile( fname );
if( !str ){ msg('fehler ' + fname); return; }
saveFile( fname + '_ed.txt', str.replace(/ZuErsetzenderPfad/g,'NeuerPfad') );
}

function msg( s ){ WScript.Echo( s ); }

function loadFile( fileName ){
var f1;
var out = "";

if( fso.FileExists(fileName) ) {
f1 = fso.OpenTextFile(fileName, 1);
if(f1.AtEndOfStream) msg("ERROR: Die Datei ist leer"); else out = f1.ReadAll();
f1.close();
}
else { msg("Datei nicht gefunden! --->" + fileName + ""); }
return out;
};

function saveFile( fileName, str ) {
var file = fso.OpenTextFile( fileName, 2, true ); // OpenTextFile( filename, iomode, create, format )
file.write( '' + str );
file.close();
};
hinweis:
Die load/save routinen sind natürlich sehr oberflächlich, und man kann natürlich auch die liste gleich mit WSH erstellen, aber erstmal so.
0 Punkte
Beantwortet von
Dank kicia !

hat funktioniert :)
...