Batch Inhalt/Text einer Batch in neue Batch schreiben - Batch automatisch erstellen

duAffentier

Commander
Dabei seit
Jan. 2008
Beiträge
2.824
Hallo,

ich möchte ein Problem lösen und hänge an einem Schritt fest.

Ziel: Eine Batch soll im Autostart bei dem entsprechenden User (der diese eben nutzt) eine neue Batch erzeugen.

Ziel-Code:
Code:
@echo off
mkdir c:\temp1
tasklist /V>c:\temp1\vor.txt
start iexplore.exe https://***.sharepoint.com/sites/project_***/Project_Data/Forms/AllItems.aspx
tasklist /V>c:\temp1\nach.txt
for /F "tokens=2 delims= " %%a in ('fc %temp%\vor.txt %temp%\nach.txt^|find "iexplore.exe"') do set PID=%%a
del C:\temp1\vor.txt
del C:\temp1\nach.txt
rd /S /Q "C:\temp1"
taskkill /f /im iexplore.exe >nul 2>nul
TASKKILL /PID %PID%
Der gesamte Ablauf ist dieser:
Code:
@echo off
set PFAD="C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\"
set DATEI=Sharepoint.cmd
set INHALT1=@echo on
set INHALT2=mkdir c:\temp1
set INHALT3=tasklist /V>c:\temp1\vor.txt
set INHALT4=start iexplore.exe https://***.sharepoint.com/sites/project_***/Project_Data/Forms/AllItems.aspx
set INHALT5=tasklist /V>c:\temp1\nach.txt
set INHALT6=for /F "tokens=2 delims= " %%a in ('fc %temp%\vor.txt %temp%\nach.txt^|find "iexplore.exe"') do set PID=%%a
set INHALT7=del C:\temp1\vor.txt
set INHALT8=del C:\temp1\nach.txt
set INHALT9=rd /S /Q "C:\temp1"
set INHALT10=taskkill /f /im iexplore.exe >nul 2>nul
set INHALT11=TASKKILL /PID %PID%

echo %INHALT1%>%PFAD%%DATEI%
echo %INHALT2%>>%PFAD%%DATEI%
echo %INHALT3%>>%PFAD%%DATEI%
echo %INHALT4%>>%PFAD%%DATEI%
echo %INHALT5%>>%PFAD%%DATEI%
echo %INHALT6%>>%PFAD%%DATEI%
echo %INHALT7%>>%PFAD%%DATEI%
echo %INHALT8%>>%PFAD%%DATEI%
echo %INHALT9%>>%PFAD%%DATEI%
echo %INHALT10%>>%PFAD%%DATEI%
echo %INHALT11%>>%PFAD%%DATEI%
goto END
Dieser Ablauf erstellt im Autostart Ordner eine Datei und schreibt den Text rein. Dies geht soweit gut.
Aber es werden nicht alle Befehle geschrieben.

Ergebniss:
Code:
@echo on
mkdir c:\temp1
ECHO ist ausgeschaltet (OFF).
start iexplore.exe https://***.sharepoint.com/sites/project_***/Project_Data/Forms/AllItems.aspx
ECHO ist ausgeschaltet (OFF).
del C:\temp1\vor.txt
del C:\temp1\nach.txt
rd /S /Q "C:\temp1"
taskkill /f /im iexplore.exe
TASKKILL /PID
Hier werden 3 Zeilen nicht geschrieben. und eine Zeile weggelassen.
Wie kann ich bei der Batch sagen, kopiere stupide den Text in die neue Datei.


Lg
 

Anhänge

Zuletzt bearbeitet:

PHuV

Commodore
Dabei seit
März 2005
Beiträge
4.767
Ich würde INHALT3, 5, 6, 10 mit Quotes "" versehen, weil Du hier ebenso Pipeumlenkungen mit > verwendest. In 6 mußt Du die " escapen mit "". Generell würde ich bei SET mit Texten immer quoten.
 

easy.2ci

Commodore
Dabei seit
Mai 2006
Beiträge
4.296
Die Variable %PID% wird natürlich zur Laufzeit aufgelöst und nicht als Text weitergeleitet.
Hier musst du %%PID%% verwenden.
 

duAffentier

Commander
Ersteller dieses Themas
Dabei seit
Jan. 2008
Beiträge
2.824
Werden diese Quotes dan entfernt, wenn die Datei geschrieben wird?
Ergänzung ()

Wie kann ich denn da das erste " und das letzte " entfernen?
Wenn diese mit geschrieben werden, funktioniert die Batch nicht.
Müsste sozusagen diese " entfernen.
 
Zuletzt bearbeitet:

PHuV

Commodore
Dabei seit
März 2005
Beiträge
4.767
Ich hab gerade selbst mal etwas rumprobiert (und genau deshalb hasse ich eigentlich cmd, mir ist richtige Shell lieber), das mit dem " ist gar nicht so einfach.
Dein Problem ist
https://docs.microsoft.com/de-de/windows-server/administration/windows-commands/set_1
Die Zeichen < , > , | , & , ^ sind spezielle befehlsshellzeichen, und Ihnen muss das Escapezeichen () vorangestellt ^ oder in Anführungszeichen eingeschlossen werden, wenn Sie in einer Zeichenfolge verwendet werden (z. b. stringenthaltende&Symbol). Wenn Sie eine Zeichenfolge, die eines der Sonderzeichen enthält, in Anführungszeichen einschließen, werden diese als Teil des Werts der Umgebungsvariable festgelegt.
Nur " setzen geht nicht, es erscheint dann in der Ausgabe. Da mußt Du dann vermutlich an diesen Stellen auf SET verzichten und es direkt als ECHO mit dem Escape ^ bei > schreiben. Den Temp-Pfad würde ich übrigens auch in eine Variable packen.
Code:
@echo off
set PFAD="C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\"
set MYTEMP=C:\temp1
set DATEI=Sharepoint.cmd
set INHALT1=@echo on
set INHALT2=mkdir %MYTEMP%
rem set INHALT3=tasklist /V >%MYTEMP%\vor.txt
set INHALT4=start iexplore.exe https://***.sharepoint.com/sites/project_***/Project_Data/Forms/AllItems.aspx
rem set INHALT5=tasklist /V >%MYTEMP%\nach.txt
set INHALT6="for /F "tokens=2 delims= " %%a in ('fc %MYTEMP%\vor.txt %MYTEMP%\nach.txt^|find "iexplore.exe"') do set PID=%%a"
set INHALT7=del %MYTEMP%\vor.txt
set INHALT8=del %MYTEMP%\nach.txt
set INHALT9=rd /S /Q D:\temp1
set INHALT10=taskkill /f /im iexplore.exe >nul 2>nul
set INHALT11=TASKKILL /PID %%PID%%

echo %INHALT1%>%PFAD%%DATEI%
echo %INHALT2%>>%PFAD%%DATEI%
rem echo %INHALT3%>>%PFAD%%DATEI%
echo tasklist /V ^>%MYTEMP%\vor.txt >>%PFAD%%DATEI%
echo %INHALT4%>>%PFAD%%DATEI%
rem echo %INHALT5%>>%PFAD%%DATEI%
echo tasklist /V ^>%MYTEMP%\nach.txt >>%PFAD%%DATEI%
echo %INHALT6%>>%PFAD%%DATEI%
echo %INHALT7%>>%PFAD%%DATEI%
echo %INHALT8%>>%PFAD%%DATEI%
echo %INHALT9%>>%PFAD%%DATEI%
echo %INHALT10%>>%PFAD%%DATEI%
echo %INHALT11%>>%PFAD%%DATEI%
 
Zuletzt bearbeitet:

duAffentier

Commander
Ersteller dieses Themas
Dabei seit
Jan. 2008
Beiträge
2.824
Servus.

Vielen Dank.
Ich habe es getestet. Auch wenn die Zeilen noch minimal anders sind, geht es.
Ich teste es auf anderen PCs nun.
Mal schauen ob es dort auch so klappt.
 

Anhänge

Top