joe65
Goto Top

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.
@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

Content-Key: 219333

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

Printed on: April 25, 2024 at 16:04 o'clock

Member: DerWoWusste
DerWoWusste Oct 14, 2013 at 18:54:20 (UTC)
Goto Top
Hi.

In welchem Ordner liegt das Skript? Das Startmenü ist mehr als zweideutig.
Member: AndreasHoster
AndreasHoster Oct 14, 2013 at 20:50:43 (UTC)
Goto Top
Ich würde es mal ohne @echo off probieren, dann sieht man was es tut und wo es hängenbleibt.
Sehen was passiert könnte helfen ...
Member: joe65
joe65 Oct 15, 2013 at 18:46:14 (UTC)
Goto Top
Hallo,

habe den echo off rausgenommen.
Der Fehler "Zugriff verweigert" tritt 3 mal auf.
1. Mal bei Codestelle:
echo Startzeit: %time% >> "%Ergebnisdatei%"  
2. Mal bei Codestelle:
for /f %%k IN ('dir "%myPath%" /s /b /A-D ^| find /c /v ""') DO @echo %%k Datei(en) im Verzeichnis %myPath% vorhanden. >> %Ergebnisdatei%  
3. Mal bei Codestelle:
echo Endezeit: %time% >> "%Ergebnisdatei%"  

Es sieht so aus, als hat er Probleme mit der Ergebnisdatei.
Die Batch-Routine (Anzahl_Dateien.cmd) liegt im Verzeichnis D:\Meine_Dateien.
Wenn ich die Routine direkt vom Verzeichnis aufrufe habe ich keine Probleme.
Das Script habe ich ins Startmenü gestellt, indem ich einfach durch Shift + "Rechte Maus Click" auf die Datei den Menüpunkt "An Startmenü anheften" gewählt habe.

Grüße
joe65
Member: pieh-ejdsch
pieh-ejdsch Oct 17, 2013 updated at 16:39:26 (UTC)
Goto Top
moin,

bei echo off sieht man ja schon wenig aber bei Echo OM ON ist noch etwas Betriebsblindheit vorhanden:
C:\Windows\system32>Title Anzahl Dateien ermitteln

C:\Windows\system32>set "Ergebnisdatei=Anzahl_Dateien_%date%.txt"
...
Im Systemverzeichnis herummalen ist auch nicht gut.

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
Member: joe65
joe65 Oct 20, 2013 at 14:40:42 (UTC)
Goto Top
Hallo Phil,

Danke für deine Anmerkungen. Ich habe mittlerweile festgestellt, das der Fehler "Zugriff verweigert" nicht mehr kommt, wenn man eine Verknüpfung des Batch-Scripts in das Startmenü stellt. Werde die Frage als gelöst markieren.

Gruß
joe65