Zum Inhalt springen

Teejay

Mitglieder
  • Gesamte Inhalte

    11
  • Benutzer seit

  • Letzter Besuch

  1. Hi lupo49, vielen dank es hat funktioniert. Hier ist der fertige Code! Pruefen.bat @echo off IF EXIST C:\Bearbeitet.txt ( EXIT )ELSE ( FOR /F "tokens=*" %%i IN ('java -jar DateiAuslesen.jar') DO SET PCNAME=%%i ) PAUSE echo PC Name wird in %PCNAME% geaendert! REG add "HKLM\SYSTEM\ControlSet001\Control\ComputerName\ComputerName" /v ComputerName /t REG_SZ /d %PCNAME% /f REG add "HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters" /v "NV Hostname" /t REG_SZ /d %PCNAME% /f REG add "HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName" /v ComputerName /t REG_SZ /d %PCNAME% /f REG add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v "NV Hostname" /t REG_SZ /d %PCNAME% /f echo PC Name erfolgreich in %PCNAME% geaendert! PAUSE echo Computername %PCNAME% wird fuer andere Systeme geloescht! java -jar C:\Loesungen\Loeschen.jar xcopy C:\Loesungen\Bearbeitet.txt C:\ PAUSE shutdown -s echo System wird Heruntergefahren PAUSE
  2. Genau! Der Wert den Auslesen.jar ausgibt muss irgendwie als Variable übernommen werden damit die Registry umgeschrieben werden kann. @echo off IF EXIST C:\Bearbeitet.txt ( EXIT )ELSE ( java -jar C:\Loesungen\DateiAuslesen.jar ) [COLOR="Red"]DER WERT DER HIER AUSGEGEBEN WIRD MUSS ALS VARIABLE ÜBERNOMMEN WERDEN....[/COLOR] PAUSE set /p pc=?????? [COLOR="Red"]UND HIER ALS VARIABLE PC GENUTZT WERDEN.[/COLOR] REG add "HKLM\SYSTEM\ControlSet001\Control\ComputerName\ComputerName" /v ComputerName /t REG_SZ /d %pc% /f REG add "HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters" /v "NV Hostname" /t REG_SZ /d %pc% /f REG add "HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName" /v ComputerName /t REG_SZ /d %pc% /f REG add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v "NV Hostname" /t REG_SZ /d %pc% /f echo PC Name erfolgreich geaendert!
  3. So bin jetzt so gut wie fertig und brauch nur noch ein letzten Schritt damit alles läuft. Hab jetzt die Idee etwas umgeändert und Java mit Batch kombiniert. Erstmal eine kurze Erklärung wie alles abläuft: 1. In Autostart befindet sich die Datei Pruefen.bat, diese Datei kontrolliert ob sich in C:\ die Datei Bearbeitet.txt befindet (Erläuterung dazu am Ende). Existiert die Datei wird Skript beendet. Falls die Datei nicht existiert wird die Datei Auslesen.jar gestartet. Pruefen.bat @echo off IF EXIST C:\Bearbeitet.txt ( EXIT )ELSE ( java -jar C:\Loesungen\DateiAuslesen.jar ) PAUSE set /p pc=[B]??????[/B] REG add "HKLM\SYSTEM\ControlSet001\Control\ComputerName\ComputerName" /v ComputerName /t REG_SZ /d %pc% /f REG add "HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters" /v "NV Hostname" /t REG_SZ /d %pc% /f REG add "HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName" /v ComputerName /t REG_SZ /d %pc% /f REG add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v "NV Hostname" /t REG_SZ /d %pc% /f echo PC Name erfolgreich geaendert! PAUSE echo Computername %pc% wird fuer andere Systeme geloescht! java -jar C:\Loesungen\Loeschen.jar xcopy C:\Loesungen\Bearbeitet.txt C:\ PAUSE echo System wird Heruntergefahren PAUSE 2. Auslesen.jar liest in der Datei C:\Computername.txt immer den Wert der ersten Zeile und gibt diesen wieder aus in den Skript Pruefen.bat aus. Auslesen.jar package dateiauslesen; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class Main { public static void main(String[] args) throws FileNotFoundException, IOException { File file = new File("c:/Computernamen.txt"); BufferedReader br = null; try { String line = null; br = new BufferedReader(new FileReader(file)); long charCnt = 0L; System.out.println(br.readLine()); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (br != null) try { br.close(); } catch (IOException e1) { e1.printStackTrace(); } }} } ??????????????????????????????????????????????????????????? 3. Nun soll der Ausgegeben Wert von Batch File als Variable %pc% übernommen werden und die Werte in der Registry ändern. ??????????????????????????????????????????????????????????? 4. Nachdem die Werte geändert wird das Loeschen.jar gestartet, welches immer die erste Zeile von C:\Computernamen.txt löscht damit der nächste Zugriff wieder einen neuen Namen bekommt. Loeschen.jar package loeschen; import java.io.RandomAccessFile; public class Main { private static long originalLengthInBytes; public static void main(String[] args) throws Exception { RandomAccessFile randomAccessFile = new RandomAccessFile("c:/Computernamen.txt","rw"); int numberOfLinesToBeSkipped = 1; for (int i = 0; i < numberOfLinesToBeSkipped; i++) { System.out.println("Skipping: " + randomAccessFile.readLine()); } long sourcePosition = randomAccessFile.getFilePointer(); long destinationPosition = 0; byte[] buffer = new byte[65535]; long originalLengthInBytes = randomAccessFile.length(); moveContent(randomAccessFile, sourcePosition, destinationPosition, originalLengthInBytes - sourcePosition,buffer); randomAccessFile.setLength(originalLengthInBytes - sourcePosition); randomAccessFile.close(); } private static void moveContent(RandomAccessFile randomAccessFile, long sourcePosition, long destinationPosition, long lengthInBytes, byte[] buffer) throws Exception { int currentByteCount = 0; int bytesRead = 0; int bytesWritten = 0; long currentSourcePosition = sourcePosition; long currentDestinationPosition = destinationPosition; randomAccessFile.seek(currentSourcePosition); do { randomAccessFile.seek(currentSourcePosition); currentByteCount = randomAccessFile.read(buffer); bytesRead += currentByteCount; if (bytesRead > lengthInBytes) { currentByteCount = ((int) lengthInBytes) - bytesWritten; } bytesWritten += currentByteCount; randomAccessFile.seek(currentDestinationPosition); randomAccessFile.write(buffer, 0, currentByteCount); currentSourcePosition += currentByteCount; currentDestinationPosition += currentByteCount; randomAccessFile.seek(currentSourcePosition); } while (bytesWritten < lengthInBytes); } } 5. Sobald die Zeile gelöscht ist wird in den Verzeichnis C:\ die Text Datei Bearbeitet.txt erstellt damit das Programm bei einen erneuten Versuch Abbrechen würde. 6. Das System wird Heruntergefahren damit die Änderungen wirksam werden. Hoffe man konnte verstehen was ich da zusammen gebastelt habe und das es manchen weiterhelfen kann. Dennoch kann ich hilfe bei Punkt 3 ziemlich gut gebrauchen damit endlich alles zusammen passt. Danke für euere Zeit und evtl. Hilfe Teejay
  4. Habs jetzt mit den Batch File aufgegeben und werd es mit Java versuchen. Falls ich es mit Java hin bekomme werd ich die Lösung hier posten für die Leute die es Interessiert. Meine Lösung soweit: (Zeile 1 wird ausgelesen) package dateiauslesen; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class Main { public static void main(String[] args) throws FileNotFoundException, IOException { File file = new File("c:/Computernamen.txt"); BufferedReader br = null; try { String line = null; br = new BufferedReader(new FileReader(file)); long charCnt = 0L; System.out.println(br.readLine()); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (br != null) try { br.close(); } catch (IOException e1) { e1.printStackTrace(); } }} } Jetzt muss ich es nur noch hinbekommen das Java den ausgelesenen Wert an ein Batch File übergibt das den Computernamen ändert (Code wird unten gepostet) und danach die erste Zeile löscht damit der nächste Zugriff wieder ein neuen Namen bekommen kann. (Batch File für dauerhafte Computernamen Änderung) @echo off set /p pc=Computername eingeben: REG add "HKLM\SYSTEM\ControlSet001\Control\ComputerName\ComputerName" /v ComputerName /t REG_SZ /d %pc% /f REG add "HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters" /v "NV Hostname" /t REG_SZ /d %pc% /f REG add "HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName" /v ComputerName /t REG_SZ /d %pc% /f REG add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v "NV Hostname" /t REG_SZ /d %pc% /f echo PC Name erfolgreich in %pc% geaendert! PAUSE
  5. Danke, lag daran! Bisher bin ich soweit das ich 2 Text Dateien habe in dem jeweils alle Computernamen stehen (weil ja Batch anscheind nur verschieben und nicht löschen kann). Beide Dateien sehen in Grunde genommen so aus: Computer1 Computer2 Computer3 usw. Computer1 Computer2 Computer3 usw. Nun führe ich folgendes Skript aus: @echo off for /f "tokens=1,* delims=:" %%i in ('findstr /n $ Computernamen2.txt') do @( for /L %%a in (1,1,1) do @if %%i==%%a @echo %%j ) PAUSE @echo off & setlocal set "InFile=Computernamen.txt" set "OutFile=Computernamen2.txt" set LineToDelete=1 if exist "%OutFile%" del "%OutFile%" for /f "tokens=1* delims=:" %%i in ('findstr /n $ "%InFile%"^|findstr /b "%LineToDelete%:"') do findstr /v /b /c:"%%j" "%InFile%">>"%OutFile%" PAUSE Beim ersten mal bekomme ich die Ausgabe: Computer1 Beim zweiten mal bekomme ich die Ausgabe: Computer2 Beim dritten mal bekomme ich die Ausgabe: Computer2 Liegt wohl daran das er beim ersten mal das Textfile unverändert liest und dannach halt umgeschrieben. Leider bekomm ich es nicht hin das es fortlaufend weiter geht. Also mit Computer3!?! Falls einer ne Lösung weiß wäre das super hilfreich. Gruß Teejay
  6. Bin soweit das er die Zeilen ausliest, wenn mir jemand sagen könnte wie ich die ausgelesenen Werte als Variablen bekommen kann und darauf die erste Zeile in den File lösche wäre ich überaus dankbar. for /f "tokens=1,* delims=:" %%i in ('findstr /n $ Computernamen.txt') do @( for /L %%a in (1,1,1) do @if %%i==%%a @echo %%j ) PAUSE Ausserdem habe ich das Problem das der Code nicht funktioniert sobald sich das File in einen anderen Verzeichnis befindet zb. for /f "tokens=1,* delims=:" %%i in ('findstr /n $ C:\Dokumente und Einstellungen\User\Desktop\Computernamen.txt') do @( for /L %%a in (1,1,1) do @if %%i==%%a @echo %%j ) PAUSE Gruß Teejay
  7. Falls jemand das gleiche Problem hat und die Lösung gebrauchen könnte! #!/bin/bash #Bitte vor Benutzung anpassen! vmPath=/home/vadmin/Desktop vmFile=testfile.txt username=vadmin copies=3; while [[ "$WISH" != "y" && "$WISH" != "n" ]] do echo "Do u want to start the copy process? [y]es [n]o" read WISH echo done if [ "$WISH" = "y" ]; then echo "Starting copy process..." for (( i = 1; i < copies+1; i++ )) do if [ ! -d $vmPath/$i ]; then mkdir $vmPath/$i chmod -R 755 $vmPath/$i fi cp $vmPath/$vmFile /home/vadmin/Desktop/$i/$i.txt chmod 755 $vmPath/$i/$i.txt chown -R $username /$vmPath #remove uuid and MAC #vmkfstools aufrufen: ./user/sbin/vmkfstools done fi if [ "$WISH" = "n" ]; then echo "Aborting operation..." exit fi
  8. Hallo, wie schon in der Überschrift angedeutet versuche ich mit einen Batchfile die Computernamen von VM´s fortlaufend zuändern. Erstmal die Problem Beschreibung: Auf meiner Workstation (Linux) befindet sich 1 VM (Windows XP) die ich 9 mal geklont habe (falls jemand das Script haben möchte einfach nur ne PM an mich senden). Nun möchte ich dass das Batch File, auf der VM, über den Share Folder auf eine Textdatei zugreift die folgende Zeilen hat: :mod: Computer 1 Computer 2 Computer 3 usw. Dort soll die VM die erste Zeile auslesen, den ausgelesenen Text als Computernamen übernehmen und dannach die vollständige erste Zeile löschen. Wenn ich daraufhin die nächste VM starte würde ja dann rein theoretisch in den Text File folgendes stehen: Computer 2 Computer 3 usw. Kenn mich leider mit Batch Files nicht sonderlich gut aus und wäre für jeden Tipp dankbar. (Sollte ich in der Zwischenzeit eine Lösung finden werd ich sie hier posten) Gruß Teejay
  9. Guten Tag, ich benötige dringend hilfe und hoffe das mir hier jemand weiterhelfen kann. Und zwar hab ich eine FOR-Schleife in ein Batch File geschrieben das eine Datei kopiert und fortlaufend ein neues Verzeichnis und Dateinnamen erstellt. Hier meine Syntax: @echo off FOR /L %%a IN (1,1,3) DO xcopy D:\VM\Ubuntu\Ubuntu.vdi D:\VM\%%a\%%a.vdi /W /E /H /N /I PAUSE Nur brauche ich diese Syntax nicht für eine Batch Datei sonder für die Shell in Linux(Hab überhaupt kein Plan von Linux). Kann mir jemand helfen wie ich das für die Shell umschreiben kann. Vielen dank im vorraus.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Weiterlesen  

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...