chrissi74
Goto Top

Batch-Datei bei Windows 7 nur über die Eingabeaufforderung möglich

Hallo,

ich habe eine Bat-Datei mit Speicherort über die Path-Variable.
Bei XP und Vista kann die Datei ohne Probleme ausgeführt werden.
Bei allen PCs mit Win7 (64-bit) funktioniert die Ausführung nicht über rechte Maustaste "Als Administrator ausführen".
Das Ausführen ist nur über die Eingabeaufforderung möglich. Aber dort auch nur, wenn ich vorher das Verzeichnis, wo sich die bat-Datei befindet, aufrufe.
Die Path-Variable habe ich überprüft. Diese ist in Ordnung.

Wo liegt das Problem?

Gruß
Chrissi74

Content-ID: 158522

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

Ausgedruckt am: 27.11.2024 um 08:11 Uhr

kingkong
kingkong 12.01.2011 um 21:50:32 Uhr
Goto Top
Ich verstehe nicht so ganz, was Du meinst. Du schreibst, Du möchtest per "Als Administrator ausführen" die Batch-Datei starten. Das hat aber doch gar nichts mit irgendeiner Path-Variablen zu tun. Oder benutzt Du in der Batch-Datei diese Variable, um auf den Speicherort zuzugreifen?
Und was meinst Du mit
Ausführen ist nur über die Eingabeaufforderung möglich. Aber dort auch nur, wenn ich vorher das Verzeichnis, wo sich die bat-Datei befindet, aufrufe.
Wenn der Pfad, im dem sich die Batch-Datei befindet, nicht in der Path-Variablen enthalten ist, dann kann der PC die Datei natürlich nicht finden. Fürs Ausführen musst Du dann also entweder in das Speicherverzeichnis wechseln, oder Du rufst die Batch-Datei mit dem kompletten Pfad auf (also z.B. "c:\users\beispieluser\documents\run.bat").
Chrissi74
Chrissi74 12.01.2011 um 22:04:03 Uhr
Goto Top
In der Batch-Datei wird diese Variable genutzt, um auf den Ausführungsort zuzugreifen. Wie gesagt, bei XP und Vista funktioniert alles so wie es soll.
Bei Win7 muss ich in der Eingabeaufforderung das Verzeichnis aufrufen, wo sich die batch-Datei befindet. (z.B. c:\progamdata\beispiel\Skript\). Hinter dieses Verzeichnis kopiere ich dann den Text aus dem Skript und bestätige dieses mit der Entertaste. Nun wird das Skript ausgeführt.
Der Weg ist leider zu umständlich.
bastla
bastla 12.01.2011 um 22:57:33 Uhr
Goto Top
Hallo Chrissi74!

Wäre es nicht sinnvoll, Deine Batch-Datei oder zumindest den relevanten Teil davon (vorzugsweise als "" formatiert) zu posten?

Grüße
bastla
Chrissi74
Chrissi74 13.01.2011 um 17:47:39 Uhr
Goto Top
Hier die Batch-Datei

sqlcmd -E -S %COMPUTERNAME%\Datenbankname -i Beispiel.sql -o Beispiel.txt

Die Beispiel.sql:

USE Datenbank

DECLARE @strtabellenname VARCHAR(50)
DECLARE @strowner VARCHAR(50)
DECLARE @strownertab VARCHAR(255)

DECLARE curTables CURSOR FOR
SELECT o.[name], u.[name] FROM sysobjects o, sysusers u where o.xtype = 'U'
AND o.name<>'dtproperties'
AND upper(u.name) <> 'DBO'
AND u.uid = o.uid

OPEN curTables
FETCH NEXT FROM curTables INTO @strtabellenname, @strowner

WHILE @@FETCH_STATUS = 0
BEGIN
SET @strownertab = @strowner + '.' + @strtabellenname;
EXEC sp_changeobjectowner @strownertab, 'dbo'

FETCH NEXT FROM curTables INTO @strtabellenname, @strowner
END

CLOSE curTables
DEALLOCATE curTables
GO

DECLARE @strtabellenname VARCHAR(50)
DECLARE @strstmt VARCHAR(512)

DECLARE curTrsfTables CURSOR FOR
SELECT [name] FROM sysobjects where
upper([name]) LIKE 'TRSF[_]%'

OPEN curTrsfTables
FETCH NEXT FROM curTrsfTables INTO @strtabellenname

WHILE @@FETCH_STATUS = 0
BEGIN
set @strstmt = 'DROP TABLE ' + @strtabellenname
EXEC(@strStmt)
FETCH NEXT FROM curTrsfTables INTO @strtabellenname
END

CLOSE curTrsfTables
DEALLOCATE curTrsfTables
GO

EXEC sp_revokedbaccess @name_in_db = 'supervisor'
GO
EXEC sp_grantdbaccess 'supervisor', 'supervisor'
Go
EXEC sp_addrolemember 'db_datareader', 'supervisor'
Go
EXEC sp_addrolemember 'db_datawriter', 'supervisor'
Go
GRANT CREATE TABLE TO supervisor
GO
Biber
Biber 13.01.2011 um 19:24:08 Uhr
Goto Top
Moin Chrissi74,

Die Path-Variable habe ich überprüft. Diese ist in Ordnung.
Welche %path%-Variable denn - die "Systemvariable" %PATH% oder die "Benutzerbezogene Variable" %PATH%?

Wenn der oben unformatiert gepostete Oneliner nichts tut, dann könnte es auch daran liegen, dass Input und Outputdateien nicht dort sind wo du hoffst.

Schreib doch wenigstens bei den "-i" und "-o"-Dateiangaben dazu, dass die im Verzeichnis der batchdatei liegen. ( also "sqlcmd ...-i %~dp0Beispiel.sql .." )

Grüße
Biber
Chrissi74
Chrissi74 14.01.2011 um 21:00:54 Uhr
Goto Top
Ich glaube es war die Systemvariable. Man hat mir gesagt, dass hier die Variable vorhanden sein muss.
Ich werde die Batch-Datei bei dem nächsten Win7 Computer ändern und sie dann ausprobieren.
Falls noch jemand einen weiteren Vorschlag hat, nehme ich diesen gerne an.
Gruß
Chrissi74