Echo. Leerzeile funktioniert plötzlich nicht mehr - CMD
Moin Zusammen,
ich habe vor einiger Zeit eine kleine CMD mit diversen Abfragen und Funktionen als "Toolsammlung" geschrieben.
(Ja, Powershell wäre bestimmt auch möglich gewesen :D).
Um die Zeilen in sämtlichen Skripten sauber abzutrennen, habe ich folgende Syntax genutzt:
Soweit so gut, klappte bisher auch alles.
Die Batch muss mit administrativen Rechten ausgeführt werden, damit alles funktioniert.
Seit heute morgen funktioniert das echo. nicht mehr, sobald ich es mit Admin-Rechten ausführe?
Folgendes wird angezeigt:
Jetzt kommt das kuriose...
Sobald ich die Batch ohne per Rechtsklick "Als Administrator ausführen" öffne, wird alles wie gewohnt angezeigt.
Folgendes muss eigentlich angezeigt werden:
Was angezeigt wird (wenn als Admin ausgeführt) ist folgendes:
Was in der Batch steht ist folgendes:
Es wird erstens Zeile 1-4 einfach ignoriert und dann funktioniert wie bereits gesagt zum zweiten die Leerzeilen im echo nicht mehr.
In sämtlichen verschachtelten Batches ebenfalls nicht, sofern diese mit verlinkt sind.
Was zur Hölle ist hier passiert? Updates wurden ebenfalls keine installiert.
Server wurde bereits gebootet.
Eine neue Test-Batch mit einem simplen echo. bringt ebenfalls den gleichen Fehler.
Ein Umbau auf Powershell ist momentan aus zeitlichen Gründen nicht möglich.
Danke!
ich habe vor einiger Zeit eine kleine CMD mit diversen Abfragen und Funktionen als "Toolsammlung" geschrieben.
(Ja, Powershell wäre bestimmt auch möglich gewesen :D).
Um die Zeilen in sämtlichen Skripten sauber abzutrennen, habe ich folgende Syntax genutzt:
echo.
Die Batch muss mit administrativen Rechten ausgeführt werden, damit alles funktioniert.
Seit heute morgen funktioniert das echo. nicht mehr, sobald ich es mit Admin-Rechten ausführe?
Folgendes wird angezeigt:
Der Befehl "echo." ist entweder falsch geschrieben oder konnte nicht gefunden werden
Jetzt kommt das kuriose...
Sobald ich die Batch ohne per Rechtsklick "Als Administrator ausführen" öffne, wird alles wie gewohnt angezeigt.
Folgendes muss eigentlich angezeigt werden:
*********************************
Testueberschrift
XXXX 2022
Letztes Update: 16.02.2022
********************************
****************
Funktionsauswahl
****************
[1] Versionshistorie (Changelog)
[2] Aktualisiere XXX
Was angezeigt wird (wenn als Admin ausgeführt) ist folgendes:
********************************
Der Befehl "echo." ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
****************
Funktionsauswahl
****************
Der Befehl "echo." ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
[1] Versionshistorie (Changelog)
Der Befehl "echo." ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
Der Befehl "echo." ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
[2] Aktualisiere XXX
Der Befehl "echo." ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
Was in der Batch steht ist folgendes:
@echo off
color FC
mode con lines=60 cols=80
echo *********************************
echo Testueberschrift
echo Copyright 2022
echo Letztes Update: 16.02.2022
echo ********************************
echo.
:loop
echo ****************
echo Funktionsauswahl
echo ****************
echo.
echo [1] Versionshistorie (Changelog)
echo.
echo.
echo [2] Aktualisiere XXX
echo.
Es wird erstens Zeile 1-4 einfach ignoriert und dann funktioniert wie bereits gesagt zum zweiten die Leerzeilen im echo nicht mehr.
In sämtlichen verschachtelten Batches ebenfalls nicht, sofern diese mit verlinkt sind.
Was zur Hölle ist hier passiert? Updates wurden ebenfalls keine installiert.
Server wurde bereits gebootet.
Eine neue Test-Batch mit einem simplen echo. bringt ebenfalls den gleichen Fehler.
Ein Umbau auf Powershell ist momentan aus zeitlichen Gründen nicht möglich.
Danke!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 2667086540
Url: https://administrator.de/contentid/2667086540
Ausgedruckt am: 05.11.2024 um 02:11 Uhr
7 Kommentare
Neuester Kommentar
Moin,
also bei mir geht es in beiden Varianten (als User/Admin).
Du hast es bestimmt auch mal auf einem anderen System probiert ?
Schaue mal nach ob unter "C:\Windows\System32" eine Datei oder ein Ordner names "echo" liegt. Wenn das der Fall ist, passiert genau das (es geht als User, und als Admin nicht).
Trommel
also bei mir geht es in beiden Varianten (als User/Admin).
Du hast es bestimmt auch mal auf einem anderen System probiert ?
Schaue mal nach ob unter "C:\Windows\System32" eine Datei oder ein Ordner names "echo" liegt. Wenn das der Fall ist, passiert genau das (es geht als User, und als Admin nicht).
Trommel
Hallo,
ich tippe mal auf Deinen Editor.
Batchdateien möchte gerne \r\n am Zeilenende.
Wenn da nur \n steht führt das zu "lustigen" Effekten.
Ich habe dies in meinen Bat-Tools am Anfang.
Ja, hat nix mit Echos zu tun...
ich tippe mal auf Deinen Editor.
Batchdateien möchte gerne \r\n am Zeilenende.
Wenn da nur \n steht führt das zu "lustigen" Effekten.
Ich habe dies in meinen Bat-Tools am Anfang.
@echo off
net session >nul 2>&1
if %errorLevel% == 0 (
echo Administratorrechte bestaetigt!
) else (
echo Administratorrechte benoetigt!
pause
exit
)
Servus,
bzgl. Admin-Rechte:
https://www.winhelponline.com/blog/automatically-elevate-batch-file-run- ...
bzgl. Admin-Rechte:
https://www.winhelponline.com/blog/automatically-elevate-batch-file-run- ...
::::::::::::::::::::::::::::::::::::::::::::
:: Automatically check & get admin rights V2
::::::::::::::::::::::::::::::::::::::::::::
@echo off
CLS
ECHO.
ECHO =============================
ECHO Running Admin shell
ECHO =============================
:init
setlocal DisableDelayedExpansion
set "batchPath=%~0"
for %%k in (%0) do set batchName=%%~nk
set "vbsGetPrivileges=%temp%\OEgetPriv_%batchName%.vbs"
setlocal EnableDelayedExpansion
:checkPrivileges
NET FILE 1>NUL 2>NUL
if '%errorlevel%' == '0' ( goto gotPrivileges ) else ( goto getPrivileges )
:getPrivileges
if '%1'=='ELEV' (echo ELEV & shift /1 & goto gotPrivileges)
ECHO.
ECHO **************************************
ECHO Invoking UAC for Privilege Escalation
ECHO **************************************
ECHO Set UAC = CreateObject^("Shell.Application"^) > "%vbsGetPrivileges%"
ECHO args = "ELEV " >> "%vbsGetPrivileges%"
ECHO For Each strArg in WScript.Arguments >> "%vbsGetPrivileges%"
ECHO args = args ^& strArg ^& " " >> "%vbsGetPrivileges%"
ECHO Next >> "%vbsGetPrivileges%"
ECHO UAC.ShellExecute "!batchPath!", args, "", "runas", 1 >> "%vbsGetPrivileges%"
"%SystemRoot%\System32\WScript.exe" "%vbsGetPrivileges%" %*
exit /B
:gotPrivileges
setlocal & pushd .
cd /d %~dp0
if '%1'=='ELEV' (del "%vbsGetPrivileges%" 1>nul 2>nul & shift /1)
::::::::::::::::::::::::::::
::START
::::::::::::::::::::::::::::
REM Run shell as admin (example) - put here code as you like
ECHO %batchName% Arguments: %1 %2 %3 %4 %5 %6 %7 %8 %9
cmd /k
Es finden sich ellenlange Threads im Netz, darüber, welches Zeichen nach ECHO am sinnvollsten ist (z.B. www.dostips.com/forum/viewtopic.php?t=774). Ich mach's kurz, eine einzelne öffnende Klammer
ist das Zeichen mit den wenigsten Nebenwirkungen und funktioniert auch noch im Fall, dass eine Datei "echo" existiert. Sieht komisch aus, ist aber so. Der Punkt ist sogar eines der "schlimmsten" Zeichen um eine Leerzeile zu schreiben, da genau das passiert, was du beobachtet hast - es wird immer zuerst nach einer Datei "echo" gesucht, egal ob sie existiert oder nicht
Steffen
echo(
Steffen
Moin Moin,
mein Weg für Admin Rechte geht etwas anders vor.
Ich kopiere die Dateien immer nach c (entweder in %TMP% oder einen festen Ordner, letzteres mein persönlicher Favorit). Und führe diese Kopie dann mit Adminrechten aus.
PS:
Ich bin ein Datum-Zeitstempel Anhänger.
Von "set Stunde" bis inkl. "set Startpunkt" sind die Zeitstempel Zeilen.
Man kann diese entfernen, aber auch bitte die Variable %StartPunkt%
mein Weg für Admin Rechte geht etwas anders vor.
Ich kopiere die Dateien immer nach c (entweder in %TMP% oder einen festen Ordner, letzteres mein persönlicher Favorit). Und führe diese Kopie dann mit Adminrechten aus.
PS:
Ich bin ein Datum-Zeitstempel Anhänger.
Von "set Stunde" bis inkl. "set Startpunkt" sind die Zeitstempel Zeilen.
Man kann diese entfernen, aber auch bitte die Variable %StartPunkt%
@echo off
setlocal enableextensions ENABLEDELAYEDEXPANSION
@prompt -$G
set Stunde=%time: =0%
set StartZeit=%Stunde:~0,2%-%TIME:~3,2%Uhr
set StartZeit2=%Stunde:~0,2%-%TIME:~3,1%xUhr
for /f "delims=" %%a in ('powershell get-date((get-date^)^) -uformat "%%Y_%%m_%%d"') do set datum=%%a
set StartPunkt=%Datum%__%StartZeit2%
set OrdnerBetreff=BlaBla
set wasmachtdieFunktion=BlaBlaBla
set "TMP-Data=c:\TMP-Data"
::das obige ist der Temporaere Ziel-Ort. Man kann auch %TMP% eintragen, dann wird es in TMP gespeichert.
set "Data-Temp=%TMP-Data%\zCMD\%~n0"
set "PfadFunktion=%Data-Temp%\%StartPunkt%.%~n0.cmd"
if /I not exist "%Data-Temp%" md "%Data-Temp%"
if /I not exist "%PfadFunktion%" (
copy "%~0" "%PfadFunktion%"
)
::Die EIGENTLICHE Admin Abfrage. Wenn nicht mit Adminrechten gestartet wird die UAC aufgerufen und eleviert gestartet.
net session >nul 2>&1 || (powershell -EP Bypass -NoP -C start '"%PfadFunktion%'" -verb runas &exit /b)
:: Ab jetzt kommt der restliche, Administrativ laufende, Code