mima89
Goto Top

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:
echo.
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:
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!

Content-ID: 2667086540

Url: https://administrator.de/contentid/2667086540

Ausgedruckt am: 22.11.2024 um 02:11 Uhr

Trommel
Lösung Trommel 02.05.2022 aktualisiert um 17:08:27 Uhr
Goto Top
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
StefanKittel
StefanKittel 02.05.2022 aktualisiert um 17:21:29 Uhr
Goto Top
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.

@echo off
net session >nul 2>&1
if %errorLevel% == 0 (
	echo Administratorrechte bestaetigt!
) else (
	echo Administratorrechte benoetigt!
	pause
	exit
)
Ja, hat nix mit Echos zu tun...
MiMa89
MiMa89 02.05.2022 aktualisiert um 17:26:42 Uhr
Goto Top
@Trommel
Omg... Das war tatsächlich die Lösung :D

Im System32 Ordner lag eine Datei namens echo.


Vielen Dank!!!!
MiMa89
MiMa89 02.05.2022 um 17:29:20 Uhr
Goto Top
@StefanKittel
Auch dir Danke für den Hinweis!

Habe ich direkt mit eingebaut face-smile
MrCount
MrCount 02.05.2022 um 18:00:02 Uhr
Goto Top
Servus,

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
rubberman
rubberman 02.05.2022 um 18:02:24 Uhr
Goto Top
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
echo(
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 face-big-smile

Steffen
TomTomBon
TomTomBon 03.05.2022 aktualisiert um 10:43:02 Uhr
Goto Top
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%

@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