veniplex
Goto Top

Batch: Variable einen Wert zuweisen

Hallo zusammen!

Ich bin gerade am verzweifeln..

Ich habe in Batch 2 Variablen:

set prefix=%time%
set suffix= ^(^!^)

Wenn ich mir von diesen den Wert ausgeben lasse, bekomme ich keinen Wert zu sehen.

Zur Info:
set "time=%time:~0,8% - "  

Was mach ich da falsch?

Content-Key: 303109

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

Printed on: April 19, 2024 at 05:04 o'clock

Member: MrCount
MrCount Apr 28, 2016 at 10:05:42 (UTC)
Goto Top
Moin,

die Variable %time% ist eine Systemvariable...


@echo off

set "prefix=%time:~0,8% - "  
set "suffix=^(^!^)"  

echo %prefix%
echo %suffix%
pause
Member: veniplex
veniplex Apr 28, 2016 updated at 10:12:25 (UTC)
Goto Top
Ja, selbst wenn ich

set "prefix=Test"  
echo %prefix% 

schreibe, bekomme ich keine Ausgabe. Das mit time funktioniert auch,
echo %time% 
gibt mir
12:11:30 - 
aus... face-confused
Member: MrCount
MrCount Apr 28, 2016 at 10:16:32 (UTC)
Goto Top
Bei mir geht's...

__prefix2016-04-28 12_15_14-c__windows_system32_cmd.exe


Wie sieht denn der gesamte Code aus??
Member: veniplex
veniplex Apr 28, 2016 at 10:18:31 (UTC)
Goto Top
Ich wusste dass das kommt :D....

Mein gesamter Code sieht wie folgt aus: (ist noch nicht fertig)

:: --------------------------------- SKRIPT ---------------------------------

:: Groesse der Kommandozeilenausgabe
mode con lines=30 cols=100

:: Titel der Kommandozeilenausgabe
title Proyas Installation

:: Globale Variablen
set "log=%logPath%%logFile%"  
set "time=%time:~0,8% - "  
set "oraclePath=C:\Oracle\product\11.2.0\client_1\bin"  

:: Farbe der Kommandozeilenausgabe
:: Hintergrundfarbe		Schriftfarbe
:: 0 = Schwarz				8 = Dunkelgrau
:: 1 = Dunkelblau			9 = Blau
:: 2 = Dunkelgruen		A = Gruen
:: 3 = Blaugruen			B = Zyan
:: 4 = Dunkelrot			C = Rot
:: 5 = Lila						D = Magenta
:: 6 = Ocker					E = Gelb
:: 7 = Hellgrau				F = Wei�
color 0F

:: Kopf der Logdatei wird erstellt
call :logWrite x x "----------------------------------------------------------------------------------------------------"  
call :logWrite x x "                                                LOG                                                 "  
call :logWrite x x "----------------------------------------------------------------------------------------------------"  
call :logWrite x x "Datum: 		%date:~0%"  
call :logWrite x x "Computer:	%computername%"  
call :logWrite x x "Benutzer:	%username%"  
call :logWrite x x "----------------------------------------------------------------------------------------------------"  

:: Ueberpruefe ob der ORACLE-Client installiert ist
:chkOracle
echo %time% Ueberpruefe ob ORACLE installiert ist ...
call :logWrite t x "Ueberpruefe ob %oraclePath% existiert ..."  
if not exist %oraclePath% 2>nul >nul (
	echo Bitte installieren Sie zuerst ORACLE auf diesem System ^(%computername%^)!
	call :logWrite t f "%oraclePath% existiert nicht"  
	call :logWrite t x "Es muss zuerst ORACLE installiert werden"  
	goto :end
)
echo %time% ORACLE Installation wurde erkannt
call :logWrite t o "%oraclePath% existiert"  
call :logWrite t x "ORACLE Installation wurde erkannt"  

:: Ueberpruefe ob Proyas bereits installiert wurde
:chkProyas


:: Starte die Installation
:start




goto :end

:: Funktion um in die Logdatei zu schreiben
:: call :logWrite [t/x] [f/o/x] "text" 
:logWrite
:: Wenn das anlegen eines Logs aktiviert ist, schreibe in die Logdatei.
if "%logBool%"=="Ja" (  
	:: Wenn der erste Parameter "t" ist, dann fuege vorne eine Zeitangabe hinzu. 
	if "%1"=="t" (  
		set prefix=%time%
		echo Prefix wurde gesetzt: %prefix%.
	)
	:: Wenn der zweite Parameter "f" ist, dann fuege hinten ein "(!)" hinzu. 
	if "%2"=="f" (  
		set suffix= ^(^!^)
		echo Suffix wurde gesetzt: %suffix%.
	) else (
		:: Wenn der zweite Parameter "o" ist, dann fuege hinten ein "(OK)" hinzu. 
		if "%2"=="o" (  
			set suffix= ^(OK^)
			echo Suffix wurde gesetzt: %suffix%.
		)
	)

	echo %prefix%%~3%suffix%>> %log%

	if "%logReg%"=="Ja" (  
		reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce" /v "ProyasLogFile" /t REG_SZ /d "\"%SystemRoot%\System32\notepad.exe\" \"%log%\"" /f  
		set "logReg=Nein"  
	)
	set prefix=
	set suffix=
)
goto :eof

:: Beendet die Installation
:end
pause
Member: MrCount
Solution MrCount Apr 28, 2016 at 10:22:21 (UTC)
Goto Top
Dann schreib mal in die ersten Zeilen
@echo off
setlocal enabledelayedexpansion


Und die Variablen dann so:
echo !prefix!
echo !suffix!
Member: veniplex
veniplex Apr 28, 2016 at 11:02:29 (UTC)
Goto Top
Oh, hab vergessen dne oberen Teil mit reinzupacken:

:: ------------------------------ EINSTELLUNGEN -----------------------------
:: Pfad zum Proyas Ordner
:: Netzwerkordner?
:: Pfad zur Proyas exe ab Ordner
:: Pfad zur ini ab Ordner

@echo off
SetLocal EnableDelayedExpansion
::
:: Soll eine Logdatei angelegt werden? (Ja/Nein)
set "logBool=Ja"  
::
:: Name der Logdatei:
set "logFile=%computername%.log"  
::
:: Pfad zur Logdatei:
set "logPath=%userprofile%\desktop\"  
::
:: Soll die Logdatei nach dem Systemneustart ge�ffnet werden? (Ja/Nein)
set "logReg=Nein"  
::
:: -------------------------------- CHANGELOG -------------------------------
:: v.2.0
::	- Optionen / Einstellungsmoeglichkeiten hinzugefuegt
::	- Zusaetzliche Ueberpruefungen hinzugefuegt
::	- Log erweitert und verbessert
::
:: --------------------------------- SKRIPT ---------------------------------

mit !prefix! und !suffix! funktioniert es wunderbar! face-smile Danke.

Worin liegt denn der Unterschied ob ich das jetzt mit % oder ! mache?
Member: Marlon1
Marlon1 May 01, 2016 at 15:24:42 (UTC)
Goto Top
Also der Code geht, achte beim ausgeben der Variablen auf das %-Zeichen, also "echo %prefix%".
Und hier ist der Code der funktioniert:
@echo off
set Zeit=%time:~0,8%
set prefix=%Zeit%
set suffix=^(^!^)
echo %prefix%
echo %suffix%
pause>NUL