Batch Was läuft hier falsch?

Manaplayer

Cadet 4th Year
Registriert
Juni 2017
Beiträge
105
Hallöchen Leute - Vielleicht kann mir hier jemand sagen was daran verkehrt ist:
Erstmal das Script:

@Echo off
CHCP 1252
TITLE Herunterfahren
SET Hrdw=D:\Eigene Dateien\Sonstiges\Scripts\3. Hardware Einstellungen
::
FOR /f "tokens=4" %%a in ('powercfg /list^|find "%COMPUTERNAME%"') do set Power=%%a
ECHO on>nul
ECHO %Power%>"%Hrdw%\%COMPUTERNAME%\EnergieID.txt"
ECHO off
POWERCFG /export "%Hrdw%\%COMPUTERNAME%\Energieeinstellungen%COMPUTERNAME%.pow" %Power%

Das Script soll ausgeführt werden beim Herunterfahren, was auch alles funktioniert.
Die Energieeinstellung in der powercfg-liste hat den jeweiligen Computernamen, daher soll er den Computernamen finden, was er auch tut. Nun zu dem Fehler - Wenn ich das Script einfach so ausführe, klappt alles - Er exportiert die Energieeinstellungen und sichert die ID der Einstellung in eine zweite Datei.
Wenn ich aber das Script als Ende mache (mit shutdown /t 0 am Ende), exportiert er die Energieeinstellungen nicht, und schreibt anstatt der ID in die Datei "ECHO ist eingeschaltet (ON)."
Was genau ist daran nun verkehrt?
 
  1. Bitte Code immer in den dafür vorgesehenen Code-Tags posten
  2. "ECHO ist eingeschaltet (ON)" ist die Meldung, die kommt, wenn man ECHO ohne weitere Parameter aufruft. Das heißt, das der Text, den du in dieser Zeile ausgeben willst, effektiv "" ist. Prüfe daher alle ECHO-Aufrufe und füge zum Test beispielsweise 1, 2, 3, etc hinzu, damit sicher etwas im Text drinsteht.
  3. "ECHO on>nul" kannst du einfacher haben: "@Echo ON"
Nichts anderes tust du ja direkt in der ersten Zeile, nur dass ECHO da mit dem @ ohne Rückmeldung ausgeschaltet wird
 
Echo on und das zweite echo off kannst Dir sparen, ist iirc überflüssig.
Bevor Du eine Variable in eine Datei schreibst, lasse Dir den Inhalt der Variable anzeigen (zumindest solange, bis alles funktioniert).

Gibt's nicht auch einfach ein "hostname"-Äquivalent unter windows?
Und ein "bash -x" (schrittweise abarbeitung des scripts mit lokalem echo), wo wir gerade dabei sind?

Die letzte Zeile dürfte eigentlich schon nicht mehr funktionieren, denn ${Power} scheint leer zu sein...

Müssen FOR-Schleifen in Batch nicht auch terminiert werden?
 
Die FOR-Schleife ist schuld. Power ist leer und somit wird aus

Code:
ECHO %Power%>file

Code:
ECHO >file

und dann kommt der Standardoutput von ECHO.

@Twostone: Jein. For-Schleifen kann man mit ( und ) eingrenzen oder ohne direkt in einer Zeile schreiben.

Code:
FOR blabla DO machirgendwas
==
FOR blabla DO (
  machirgendwas
)
 
Das Problem ist vermutlich, daß mit Shutdown-Event keine neuen Prozesse gestartet werden können und mit entsprechender Fehlermeldung aussteigen. Entsprechend liefert powercfg ... auch nichts.
 
RalphS schrieb:
Das Problem ist vermutlich, daß mit Shutdown-Event keine neuen Prozesse gestartet werden können

Wäre wohl nur war, wenn batch parallel abarbeiten würde. Der shutdown wird (hoffentlich) jedoch erst am logischen Ende der Anweisungsliste stehen.
 
Cool, allen erstmal Danke die sich überhaupt für die Sache interessiert haben.
Die Bitte ganz am Anfang hab ich nicht richtig verstanden - Soll heissen das komplette Script soll hier rein?
Ich denke nicht dass was wichtiges für die Sache gefehlt hat bisher, aber wundert euch nicht dass es lang ist - Es ist für drei Systeme gleichzeitig geschrieben, die unterschiedliche Datenanforderungen haben. Es ist dafür gedacht manche Daten aus der RamDisk zu sichern (Laufwerk Z:\), und alle zwei Wochen Sicherungen von Software und Hardwareeinstellungen zu machen beim beenden.
Code:
@Echo[/USER] off

CHCP 1252

TITLE Herunterfahren

SET Aufgabe=/s

ECHO Bak >%TEMP%\Bak.dat

SET FfDir=%RamDisk%FirefoxPortable

SET Sftw=D:\Eigene Dateien\Sonstiges\Scripts\2. Verbindungen und Darstellung

SET Hrdw=D:\Eigene Dateien\Sonstiges\Scripts\3. Hardware Einstellungen

SET DatumErreicht=0

IF exist C:\Users\%USERNAME%\Documents\7-Zip (set zip=C:\Users\%USERNAME%\Documents\7-Zip\7z.exe) else (set zip=%Tools%\Archive\Bearbeiten\7-Zip\7z.exe)

::

:FireFox

::

IF exist %FfDir%\Data\exclude.txt (

TASKLIST /fi "imagename eq firefox.exe" 2>nul | find /i /n "firefox.exe">nul

IF %ERRORLEVEL%==0 (

taskkill /im firefox.exe

goto FireFox)

CD /d %FfDir%\Data

FOR /f %%i in (exclude.txt) do rd /s /q %%i

FOR /f %%k in (exclude2.txt) do del %%k

TIMEOUT /t 3 >nul

CD /d %FfDir%

START /b /wait "7z" %zip% u %Tools%\FirefoxPortable\Data.zip -x!App -x!FirefoxPortable.exe -x!FirefoxPortable.ini -mx1 -w%TEMP% -up1q0r2x1y2z1w2)

FORFILES /d -7 /p %Tools%\FireFoxPortable /m "Data - Backup.zip"

IF %errorlevel%==0 (

goto FirefoxBackup) else (

goto Knuddels)

::

:FirefoxBackup

::

TIMEOUT /t 3 >nul

FOR /f "tokens=1-3" %%i in ('dir %Tools%\FirefoxPortable\Data.zip /-C /S ^|find "Datei(en)" ^|find "Bytes"') do set Größe=%%k

IF %Größe% lss 25000000 (goto Fehler1)

IF %Größe% gtr 70000000 (goto Fehler1)

COPY /y %Tools%\FirefoxPortable\Data.zip "%Tools%\FirefoxPortable\Data - Backup.zip"

::

:Knuddels

::

TASKLIST /fi "imagename eq Start Knuddels.exe" 2>nul | find /i /n "Start Knuddels.exe">nul

IF %ERRORLEVEL%==0 (

taskkill /im "Start Knuddels.exe" /f

taskkill /im javaw.exe /f

timeout /t 3 > nul

goto Knuddels) else (

If exist %TEMP%\KnuData.zip (

XCOPY /d /y %TEMP%\KnuData.zip %Tools%\Sonstige\Knuddels))

::

:MüllUndBackup

::

IF exist %RamDisk%FSViewer\FSSettings.db (

XCOPY /d /y %RamDisk%FSViewer\FSSettings.db %Tools%\Bilderbearbeitung\FSViewer)

::

IF %COMPUTERNAME%==P7618 (goto P7618)

IF %COMPUTERNAME%==P8P67 (goto P8P67)

IF %COMPUTERNAME%==PH317 (goto PH317) else (start cmd /k echo Der Computername stimmt nicht. Alle Aufgaben erfüllt.

exit)

::

::------------------------------P7618------------------------------

::

:p7618

::

IF not exist "%Hrdw%\%COMPUTERNAME%\Datum.dat" (echo %DATE% >%Hrdw%\%COMPUTERNAME%\Datum.dat)

FORFILES /d -14 /p "%Hrdw%\%COMPUTERNAME%" /m Datum.dat

IF %errorlevel%==0 (

set DatumErreicht=1) else (goto BeendenP7618)

::

::HardwareBackup

::

::

IF %DatumErreicht%==1 (

FOR /f "tokens=4" %%a in ('powercfg /list^|find "%COMPUTERNAME%"') do set Power=%%a

ECHO on>nul

ECHO %Power%>"%Hrdw%\%COMPUTERNAME%\EnergieID.txt"

ECHO off

POWERCFG /export "%Hrdw%\%COMPUTERNAME%\Energieeinstellungen%COMPUTERNAME%.pow" %Power%

COPY /y "C:\ProgramData\NVIDIA Corporation\Drs\nvdrsdb0.bin" "%Hrdw%\%COMPUTERNAME%"

COPY /y "C:\ProgramData\NVIDIA Corporation\Drs\nvdrsdb1.bin" "%Hrdw%\%COMPUTERNAME%"

REG export "HKLM\Software\NVIDIA Corporation" "%Hrdw%\%COMPUTERNAME%\Nvidia.reg" /y

REG export "HKCU\Software\NVIDIA Corporation" "%Hrdw%\%COMPUTERNAME%\NvidiaUser.reg" /y

REG export "HKLM\Software\WOW6432Node\NVIDIA Corporation" "%Hrdw%\%COMPUTERNAME%\NvidiaWow64.reg" /y

REG export HKLM\SYSTEM\ControlSet001\Services\NVDisplay.ContainerLocalSystem "%Hrdw%\%COMPUTERNAME%\NvidiaControl.reg" /y

REG export HKLM\Software\Realtek "%Hrdw%\%COMPUTERNAME%\audio.reg" /y

REG export HKCU\Software\Realtek "%Hrdw%\%COMPUTERNAME%\audioUser.reg" /y

REG export "HKLM\SYSTEM\ControlSet001\Control\DeviceClasses\{6994ad04-93ef-11d0-a3cc-00a0c9223196}" "%Hrdw%\%COMPUTERNAME%\Audio2.reg" /y

REG export HKCU\Software\INTEL "%Hrdw%\%COMPUTERNAME%\IntelDisplay.reg" /y

REG export HKLM\Software\ImDisk "%Hrdw%\%COMPUTERNAME%\RamDisk.reg" /y

CALL "%Hrdw%\backup helper.bat"

::

::

::SoftwareBackup

::

::

CALL "D:\Eigene Dateien\Emulation\ConfigDaten sichern.bat"

MD %TEMP%\BackupSML\Menulayouts

start /b /wait "Startkacheln Backup" %zip% x "%Sftw%\Explorer\Startkacheln.7z" -o%TEMP%\BackupSML

call %TEMP%\BackupSML\Startkacheln.bat

CALL "%Sftw%\7zHelper.bat"

REG export "HKCU\Software\from Dennis Babkin" "%Sftw%\%COMPUTERNAME%\ComTrayMeter.reg" /y

REG export HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer "%Sftw%\%COMPUTERNAME%\Explorer Darstellung.reg" /y

REG export "HKCU\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell" "%Sftw%\%COMPUTERNAME%\Explorer Darstellung 2.reg" /y

REG export HKLM\SOFTWARE\Microsoft\PolicyManager\default\Browser "%Sftw%\%COMPUTERNAME%\Edge Einstellungen.reg" /y

REG export HKCU\Software\Microsoft\Windows\CurrentVersion\TaskManager "%Sftw%\%COMPUTERNAME%\TaskManager.reg" /y

REG export HKCU\Software\HWiNFO64 "%Tools%\Hardware Sensor\HWiNFO\HWiNFO %COMPUTERNAME%.reg" /y

::

MD %TEMP%\Explorer

COPY /y C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\recent\automaticdestinations\*.automaticDestinations-ms %TEMP%\Explorer

COPY /y C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\recent\customdestinations\*.customDestinations-ms %TEMP%\Explorer

CD /d %TEMP%\Explorer

IF not exist "%Sftw%\Explorer\%COMPUTERNAME%.7z" (

start /b /wait "7z" %zip% a "%Sftw%\Explorer\%COMPUTERNAME%.7z") else (

start /b /wait "7z" %zip% u "%Sftw%\Explorer\%COMPUTERNAME%.7z" -w%TEMP% -up1q0r2x1y2z1w2)

::

echo %date% %time%>"%Hrdw%\%COMPUTERNAME%\Datum.dat")

::

::

:BeendenP7618

::

SHUTDOWN %Aufgabe% /t 0

EXIT

::

::------------------------------P8P67------------------------------

::

:p8P67

::

IF not exist "%Hrdw%\%COMPUTERNAME%\Datum.dat" (echo %DATE% >%Hrdw%\%COMPUTERNAME%\Datum.dat)

FORFILES /d -14 /p "%Hrdw%\%COMPUTERNAME%" /m Datum.dat

IF %errorlevel%==0 (

set DatumErreicht=1) else (goto BeendenP8P67)

::

::HardwareBackup

::

::

IF %DatumErreicht%==1 (

FOR /f "tokens=4" %%a in ('powercfg /list^|find "%COMPUTERNAME%"') do set Power=%%a

ECHO on>nul

ECHO %Power%>"%Hrdw%\%COMPUTERNAME%\EnergieID.txt"

ECHO off

POWERCFG /export "%Hrdw%\%COMPUTERNAME%\Energieeinstellungen%COMPUTERNAME%.pow" %Power%

COPY /y C:\ProgramData\Creative\Spi\{00000004-00000000-00000000-00001102-0000000B-00411102}\THX\THX.ini "%Hrdw%\%COMPUTERNAME%"

COPY /y C:\ProgramData\Creative\Spi\{00000004-00000000-00000000-00001102-0000000B-00411102}\Speakers\Speakers.ini "%Hrdw%\%COMPUTERNAME%"

COPY /y C:\ProgramData\Creative\Spi\{00000004-00000000-00000000-00001102-0000000B-00411102}\Modes\CTXFIEMu.ini "%Hrdw%\%COMPUTERNAME%"

COPY /y C:\ProgramData\Creative\Spi\{00000004-00000000-00000000-00001102-0000000B-00411102}\Modes\CTXFIGMu.ini "%Hrdw%\%COMPUTERNAME%"

COPY /y C:\ProgramData\Creative\Spi\{00000004-00000000-00000000-00001102-0000000B-00411102}\Modes\CTXFIGMu.rfx "%Hrdw%\%COMPUTERNAME%"

COPY /y C:\ProgramData\Creative\Spi\{00000004-00000000-00000000-00001102-0000000B-00411102}\Modes\CTXFIEMu.rfx "%Hrdw%\%COMPUTERNAME%"

REG export HKLM\SOFTWARE\AMD "%Hrdw%\%COMPUTERNAME%\AMD.reg" /y

REG export HKCU\Software\ATI\ACE\Settings\ADL\MaxCofuncPaths "%Hrdw%\%COMPUTERNAME%\ATi.reg" /y

REG export HKLM\SOFTWARE\WOW6432Node\ATI "%Hrdw%\%COMPUTERNAME%\ATi2.reg" /y

REG export "HKLM\SOFTWARE\WOW6432Node\ATI Technologies" "%Hrdw%\%COMPUTERNAME%\ATi3.reg" /y

REG export "HKLM\SOFTWARE\ATI Technologies" "%Hrdw%\%COMPUTERNAME%\ATi4.reg" /y

REG export HKLM\SYSTEM\CurrentControlSet\Control\Class\{4d36e968-e325-11ce-bfc1-08002be10318}\0000 "%Hrdw%\%COMPUTERNAME%\ATi5.reg" /y

REG export "HKLM\SYSTEM\CurrentControlSet\Control\Class\{4d36e968-e325-11ce-bfc1-08002be10318}\Configuration" "%Hrdw%\%COMPUTERNAME%\ATi6.reg" /y

REG export "HKLM\SOFTWARE\CREATIVE TECH" "%Hrdw%\%COMPUTERNAME%\Audio.reg" /y

REG export "HKLM\SYSTEM\ControlSet001\Control\DeviceClasses\{6994ad04-93ef-11d0-a3cc-00a0c9223196}" "%Hrdw%\%COMPUTERNAME%\Audio2.reg" /y

REG export HKLM\SOFTWARE\ImDisk "%Hrdw%\%COMPUTERNAME%\RamDisk.reg" /y

CALL "%Hrdw%\backup helper.bat"

::

::

::SoftwareBackup

::

::

CD /d "D:\Eigene Dateien\Emulation"

CALL "ConfigDaten sichern.bat"

MD %TEMP%\BackupSML\Menulayouts

start /b /wait "Startkacheln Backup" %zip% x "%Sftw%\Explorer\Startkacheln.7z" -o%TEMP%\BackupSML

call %TEMP%\BackupSML\Startkacheln.bat

CALL "%Sftw%\7zHelper.bat"

REG export HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer "%Sftw%\%COMPUTERNAME%\Explorer Darstellung.reg" /y

REG export "HKCU\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell" "%Sftw%\%COMPUTERNAME%\Explorer Darstellung 2.reg" /y

REG export "HKCU\Software\from Dennis Babkin" "%Sftw%\%COMPUTERNAME%\ComTrayMeter.reg" /y

TASKKILL /im HWiNFO64.exe

REG export HKCU\Software\HWiNFO64 "%Tools%\Hardware Sensor\HWiNFO\HWiNFO %COMPUTERNAME%.reg" /y

REG export "HKLM\SOFTWARE\Microsoft\PolicyManager\default\Browser "%Sftw%\%COMPUTERNAME%\Edge Einstellungen.reg" /y

REG export HKCU\Software\Microsoft\Windows\CurrentVersion\TaskManager "%Sftw%\%COMPUTERNAME%\TaskManager.reg" /y

::

MD %TEMP%\Explorer

COPY /y C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\recent\automaticdestinations\*.automaticDestinations-ms %TEMP%\Explorer

COPY /y C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\recent\customdestinations\*.customDestinations-ms %TEMP%\Explorer

CD /d %TEMP%\Explorer

IF not exist "%Sftw%\Explorer\%COMPUTERNAME%.7z" (

start /b /wait "7z" %zip% a "%Sftw%\Explorer\%COMPUTERNAME%.7z") else (

start /b /wait "7z" %zip% u "%Sftw%\Explorer\%COMPUTERNAME%.7z" -w%TEMP% -up1q0r2x1y2z1w2)

::

echo %date% %time%>"%Hrdw%\%COMPUTERNAME%\Datum.dat")

::

::

:BeendenP8P67

::

SHUTDOWN %Aufgabe% /t 0

EXIT

::

::------------------------------PH317------------------------------

::

:pH317

::

IF not exist "%Hrdw%\%COMPUTERNAME%\Datum.dat" (echo %DATE% >%Hrdw%\%COMPUTERNAME%\Datum.dat)

FORFILES /d -14 /p "%Hrdw%\%COMPUTERNAME%" /m Datum.dat

IF %errorlevel%==0 (

set DatumErreicht=1) else (goto BeendenPH317)

::

::HardwareBackup

::

IF %DatumErreicht%==1 (

FOR /f "tokens=4" %%a in ('powercfg /list^|find "%COMPUTERNAME%"') do set Power=%%a

ECHO on>nul

ECHO %Power%>"%Hrdw%\%COMPUTERNAME%\EnergieID.txt"

ECHO off

POWERCFG /export "%Hrdw%\%COMPUTERNAME%\Energieeinstellungen%COMPUTERNAME%.pow" %Power%

COPY /y "C:\ProgramData\NVIDIA Corporation\Drs\nvdrsdb0.bin" "%Hrdw%\%COMPUTERNAME%"

COPY /y "C:\ProgramData\NVIDIA Corporation\Drs\nvdrsdb1.bin" "%Hrdw%\%COMPUTERNAME%"

REG export "HKLM\Software\NVIDIA Corporation" "%Hrdw%\%COMPUTERNAME%\Nvidia.reg" /y

REG export "HKCU\Software\NVIDIA Corporation" "%Hrdw%\%COMPUTERNAME%\NvidiaUser.reg" /y

REG export "HKLM\Software\WOW6432Node\NVIDIA Corporation" "%Hrdw%\%COMPUTERNAME%\NvidiaWow64.reg" /y

REG export HKLM\SYSTEM\ControlSet001\Services\NVDisplay.ContainerLocalSystem "%Hrdw%\%COMPUTERNAME%\NvidiaControl.reg" /y

REG export HKLM\Software\Realtek "%Hrdw%\%COMPUTERNAME%\audio.reg" /y

REG export HKCU\Software\Realtek "%Hrdw%\%COMPUTERNAME%\audioUser.reg" /y

REG export "HKLM\SYSTEM\ControlSet001\Control\DeviceClasses\{6994ad04-93ef-11d0-a3cc-00a0c9223196}" "%Hrdw%\%COMPUTERNAME%\Audio2.reg" /y

REG export HKCU\Software\INTEL "%Hrdw%\%COMPUTERNAME%\IntelDisplay.reg" /y

REG export HKLM\Software\ImDisk "%Hrdw%\%COMPUTERNAME%\RamDisk.reg" /y

CALL "%Hrdw%\backup helper.bat"

::

SoftwareBackup

::

CALL "D:\Eigene Dateien\Emulation\ConfigDaten sichern.bat"

MD %TEMP%\BackupSML\Menulayouts

start /b /wait "Startkacheln Backup" %zip% x "%Sftw%\Explorer\Startkacheln.7z" -o%TEMP%\BackupSML

call %TEMP%\BackupSML\Startkacheln.bat

CALL "%Sftw%\7zHelper.bat"

REG export "HKCU\Software\from Dennis Babkin" "%Sftw%\%COMPUTERNAME%\ComTrayMeter.reg" /y

REG export HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer "%Sftw%\%COMPUTERNAME%\Explorer Darstellung.reg" /y

REG export "HKCU\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell" "%Sftw%\%COMPUTERNAME%\Explorer Darstellung 2.reg" /y

REG export HKLM\SOFTWARE\Microsoft\PolicyManager\default\Browser "%Sftw%\%COMPUTERNAME%\Edge Einstellungen.reg" /y

REG export HKCU\Software\Microsoft\Windows\CurrentVersion\TaskManager "%Sftw%\%COMPUTERNAME%\TaskManager.reg" /y

REG export HKCU\Software\HWiNFO64 "%Tools%\Hardware Sensor\HWiNFO\HWiNFO %COMPUTERNAME%.reg" /y

::

MD %TEMP%\Explorer

COPY /y C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\recent\automaticdestinations\*.automaticDestinations-ms %TEMP%\Explorer

COPY /y C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\recent\customdestinations\*.customDestinations-ms %TEMP%\Explorer

CD /d %TEMP%\Explorer

IF not exist "%Sftw%\Explorer\%COMPUTERNAME%.7z" (

start /b /wait "7z" %zip% a "%Sftw%\Explorer\%COMPUTERNAME%.7z") else (

start /b /wait "7z" %zip% u "%Sftw%\Explorer\%COMPUTERNAME%.7z" -w%TEMP% -up1q0r2x1y2z1w2)

::

echo %date% %time%>"%Hrdw%\%COMPUTERNAME%\Datum.dat")

::

::

:BeendenPH317

::

SHUTDOWN %Aufgabe% /t 0

EXIT

::

:Fehler1

::

echo msgbox "Die Archivgröße vom FireFox-Backup ist ungewöhnlich. Herunterfahren wird abgebrochen.",0,"Fehler 1" >%TEMP%\Fehler1.vbs

timeout /t 3 >nul

start %TEMP%\Fehler1.vbs

EXIT
 
Zuletzt bearbeitet:
Ach Sch***... Kannst Du die RAM-Disk nicht als overlay-FS mounten und zum shutdown lediglich ein commit durchführen?

Und, vor Allem, warum nutzt Du nicht die CODE-tags? Macht das Lesen für uns deutlich leichter.
 
Warum nutzt Du nicht die CODE-TAGS?

Meine persoenliche Vermutung.
Wenn Dein Script per "Geplanter Aufgabe" bei ShutDown rennen soll, ist nicht genug Zeit den Krams abzuarbeiten.

Warum laesst Du den (Backup)-Krams nicht regelmaessig zur regulaeren Laufzeit rennen?

BFF
 
Wenn ihr mir erstmal erklärt was die "Code-Tags" bedeuten, werde ich es sicher auch verwenden.
Nun zum Thema:
Ich hab es vorhin versucht eine pause bei der Problemzeile zu machen.
Wenn ich in der Zeile

FOR /f "tokens=4" %%a in ('powercfg /list^|find "%COMPUTERNAME%"') do (set Power=%%a)
ECHO %Power%

eingebe, kommt nur das "ECHO ist ein geschaltet"
Wenn ich aber

FOR /f "tokens=4" %%a in ('powercfg /list^|find "%COMPUTERNAME%"') do (echo %%a)

eingebe, kommt die EnergieID bei heraus o.O
 
Wegen der Code-Tags.



Kommt dann etwa so rueber.

Code:
FOR /f "tokens=4" %%a in ('powercfg /list^|find "%COMPUTERNAME%"') do (set Power=%%a)
ECHO %Power%

BFF

Bin immer noch der Meinung, dass das Konstrukt da oben anders besser loesbar waere.
 
Mach mal

Code:
for /f "tokens = 4" %%a in ( 'powercfg /list^ | find "%COMPUTERNAME%"' ) do ( set Power = echo "%%a")
echo %Power%
 
Da kommt auch wieder nur "ECHO ist eingeschaltet"
Ergänzung ()

Um eine Vorstellung zu geben was dabei rauskommt, wenn es richtig läuft, ist es diese Zeile:

25bc5a63-7541-4ba8-adb6-54f66c1e5856
 
Hast Du die Variable mal umbenannt? Nicht, daß "Power" nicht verwendet werden kann...

Eigentlich stimmte Deine Syntax, sofern ich mich zurück erinnern kann...
 
Nur mal so ein Schuss ins Blaue:

Code:
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

FOR bla DO SET Power=%%a
ECHO !Power!

Eigentlich sollte das nur zum Tragen kommen, wenn die Variable Power innerhalb der Schleife nach dem SET gleich wieder gelesen wird, aber evtl. hilft das hier trotzdem. Kann ich am Handy schlecht testen ;)
 
Mit !Power! hat es funktioniert - Nur wieso? Was ist daran anders? Bzw. was bedeutet das "
SETLOCAL ENABLEDELAYEDEXPANSION" ?
 
Na ja, das Problem war ja, daß Du den Wert einer Variable quasi dynamisch setzen wolltest, nämlich über den Inhalt einer zweiten Variable. Das Problem ist, daß erst die Variable erweitert, und dann die Schleife Schleife ausgeführt wird. Vor der Ausführung ist aber ${a} noch nicht gesetzt, somit ist ${Power} folgerichtig leer.

Ich habe keine Ahnung von diesem Sch***.
 
Das hat damit zu tun, dass BATCH anders als andere Skript- oder Programmiersprachen die Variablen standardmäßig nicht zur Laufzeit auswertet, sondern wenn die Zeile eingelesen wird, also vor der Ausführung. Mit ENABLEDELAYEDEXPANSION aktiviert man eben genau das, die Variable wird erst dann ausgewertet, wenn sie verwendet wird (mit !bla! ).
 
Cool, ich danke euch - Damit ist mein letztes Problem in diesem Script endlich erledigt :)
 
Auf sowas muß man erst einmal kommen...

Scripten in batch ist wie coden in VBA, man schießt sich nur selbst in den Fuß. Mit einer 120mm-Kanone. Aus nächster Nähe. Und trotzdem fast verfehlt.
 
  • Gefällt mir
Reaktionen: DubZ und Raijin
Zurück
Oben