Script funktioniert nicht mehr, wenn es unter Startmenü ausgeführt wird
Das folgende Batch-Script funktioniert nicht mehr, wenn ich es in das Startmenü von Windows 7 einbinde und von dort aus ausführen will.
Ich bekomme dann den Fehler: Zugriff verweigert.
Meine Vermutung ist, das auf die "Ergebnisdatei" nicht zugegriffen werden kann.
Grüße
joe65
Ich bekomme dann den Fehler: Zugriff verweigert.
Meine Vermutung ist, das auf die "Ergebnisdatei" nicht zugegriffen werden kann.
@echo off
setlocal
cls
mode con: cols=130 lines=50
Title Anzahl Dateien ermitteln
set "Ergebnisdatei=Anzahl_Dateien_%date%.txt"
:setPath
color 07
set myPath=
set /p myPath=Geben Sie das Verzeichnis ein:
echo.
if /i '%myPath%'=='' (
color 47
echo Es wurde kein Verzeichnis eingegeben!
pause
goto setPath
)
if /i not exist %myPath% (
color 47
Ungueltiges Verzeichnis: %myPath%
goto setPath
)
echo Anzahl der Dateien im Verzeichnis %myPath% ermitteln
echo und in eine Ergebnisdatei = %Ergebnisdatei% schreiben!
pause
echo Bitte warten ...
echo Startzeit: %time% >> "%Ergebnisdatei%"
for /f %%k IN ('dir "%myPath%" /s /b /A-D ^| find /c /v ""') DO @echo %%k Datei(en) im Verzeichnis %myPath% vorhanden. >> %Ergebnisdatei%
echo Endezeit: %time% >> "%Ergebnisdatei%"
color 27
echo.
echo Anzahl Dateien wurden ermittelt!
pause
Grüße
joe65
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 219333
Url: https://administrator.de/contentid/219333
Ausgedruckt am: 25.11.2024 um 18:11 Uhr
5 Kommentare
Neuester Kommentar
moin,
bei echo off sieht man ja schon wenig aber bei EchoOM ON ist noch etwas Betriebsblindheit vorhanden:
Im Systemverzeichnis herummalen ist auch nicht gut.
Falls es mal wieder hakt ist ein Test besser:
Gruß Phil
bei echo off sieht man ja schon wenig aber bei Echo
C:\Windows\system32>Title Anzahl Dateien ermitteln
C:\Windows\system32>set "Ergebnisdatei=Anzahl_Dateien_%date%.txt"
...
Falls es mal wieder hakt ist ein Test besser:
::@echo off
rem hat in einer Ungetesteten Batch/Bereich nichts verloren
rem wenn ich Eine Batch teste dann lege ich ECHO ON/ECHO OFF in
rem einer Offenen CMD_Line fest und starte darin den Batch
setlocal
rem Ein paar kleine Helferlein
rem zum testen von Batchdateien
rem Prompt kuerzer einstellen [Gilt in diesem SetLocal ]
set Prompt=$G$S
rem Wenns nacher auch so sein soll: Prompt $G$S
rem Echo Ausgabe?
call :checkECHO
:checkCMDline Überprüft ob die Batch in der Kommandozeile gestartet wurde.
@echo off
setlocal disabledelayedexpansion
rem CMD-Kontex ?
set "CMDPause=%~f0"
set "CMDPause=%CMDPause:\=\\%"
set "CMDPause=%CMDPause:.=\.%"
setlocal enabledelayedexpansion
for /f delims^= %%i in ("!CMDcmdLine!") do endlocal &set "CMDPin=%%i"
cmd /von /c "echo !CMDPin!" |findstr /irc:"cmd .*\/c \"\"%CMDPause%\" .*\"" >nul &&endlocal &&set "CMDPause=pause &" ||endlocal &&set "CMDPause="
:;end_checkCMDline Variable CMDpause wird im Batchkontex zur verfügung gestellt.
rem Wiederherstellen der vorigen ECHO einstellung
if %mon%. equ rem. echo on
%mon% Ich laufe in diesem Verzeichnis:
cd
%mon%
%mon% Der name der Batchdatei ist:
%mon% %~n0
%mon%
%mon% Der Pfad der Batchdatei ist:
%mon% %~dp0
%mon%
call :sub1
if errorlevel 1 echo Fehler im vorigen Befehl
call :sub check
if errorlevel 1 echo Fehler im vorigen Befehl
if errorlevel 0 echo voriger Befehl erfolgreich
goto :weiter Hinter der Sub
if errorlevel 1 rem Der Fehler wird beim goto nicht angezeigt
:sub
%mon% Wo laufe ich denn?
setlocal enabledelayedexpansion
set R=%0
if !R:~^,1! neq : (endlocal
%mon% Ich bin in der Batch: "%~f0"
%mon% die Paramter der Batch sind: %*
) else (
%mon% Ich bin in der Subroutine: %0
%mon% die Paramter der Subroutine sind: %*
)
%mon%
exit /b 0
:weiter
%mon% Wo laufe ich denn?
setlocal enabledelayedexpansion
set R=%0
if !R:~^,1! neq : (endlocal
%mon% Ich bin in der Batch: "%~f0"
%mon%
%mon% die Paramter der Batch sind: %*
) else (
%mon% Ich bin in der Subroutine: %0
%mon%
%mon% die Paramter der Subroutine sind: %*
)
rem Das Verzeichnis der Batchdatei verwenden
pushD "%~dp0"
cd
popD
rem und nun gibts eine Pause wenn dieser Batch nicht im CDM-Kontex ist,
rem was man ja beim Testen ohnehin in einer offenen CMD-Line tun sollte.
%cmdpause% exit /b
:checkECHO Um eine Batch vor dem Produktivbetrieb zu testen
rem Mon Zeilen bei ECHO ON auf REM umschalten, um zB. Kommentarzeilen
rem auch bei ECHO OFF anzuzeigen sowie die vorherige Wiedergabe des Echos
rem bei echo on zu unterbinden wird die Variable Mon dementsprechend gesetzt.
echo>"%temp%\isOn.echocheck"
< "%temp%\isOn.echocheck" find "ON" >nul && set "Mon=rem" || set "Mon=echo("
del "%temp%\isOn.echocheck"
:;end_checkECHO
exit /b
Gruß Phil