Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst Per Batch nach bestimmten Dateien suchen und Dateiname in Variable schreiben

Mitglied: blacksun

blacksun (Level 1) - Jetzt verbinden

12.02.2019 um 18:42 Uhr, 139 Aufrufe, 9 Kommentare, 1 Danke

Hallo,

ich habe einen Ordner
c:\test
Darin liegen verschiedene Dateien.

In diesem Ordner soll eine Batch-Datei suchen.bat erstellt werden

Wenn diese ausgeführt wird, dann soll der Ordner, in dem die Datei suchen.bat sich befindet, nach Dateien *start.bat durchsucht werden.
Es soll nur der aktuelle Ordner durchsucht werden, keine Unterordner.
Der gefundene Dateiname soll in einer Variablen landen die per Echo ausgegeben wird.

Der Ordner, in dem die Datei suchen.bat abgelegt ist bzw. in dem die Datei sucht, soll nicht fest hinterlegt sein, sondern immer den Ordner nutzen den, aus dem sie aufgerufen wird.

Wie setze ich das am besten um?
(nur Windows-Boardmittel, keine extra Tools)

Danke.
Mitglied: freesolo
12.02.2019 um 21:15 Uhr
01.
@echo off
02.
for %%a in ("%~dp0*start.bat") do echo %%a
Bitte warten ..
Mitglied: blacksun
13.02.2019 um 13:44 Uhr
fast genau das was ich brauche.
in %%a steht nun der komplette Pfad + Dateiname + Dateiendung. Wie bekomme ich nur Dateinamen ohne Pfad und ohne Endung?
(die Dateinamen sind unterschiedlich lang, einzige Gemeinsamkeit ist dass sie mit *start aufhören und die Dateiendung bat haben)
Bitte warten ..
Mitglied: freesolo
13.02.2019, aktualisiert um 13:58 Uhr
in %%a steht nun der komplette Pfad + Dateiname + Dateiendung. Wie bekomme ich nur Dateinamen ohne Pfad und ohne Endung?
Mit
%%~na
for /? auf der Konsole eingeben und lernen was die Dinge bedeuten.

        FOR /F " usebackq delims==" %i IN (`set`) DO @echo %i

Zusätzlich wurde die Ersetzung von Verweisen auf FOR-Variablen erweitert.
Sie können jetzt folgende Syntax verwenden:

    %~I         - Expandiert %I und entfernt alle umschließenden
                   Anführungszeichen (").
    %~fI        - Expandiert %I zu einem vollständigen Dateinamen.
    %~dI        - erstellt nur den Laufwerkbuchstaben von %I.
    %~pI        - erstellt nur den Pfad von %I.
    %~nI        - erstellt nur den Dateinamen von %I.
    %~xI        - erstellt nur die Dateierweiterung von %I.
    %~sI        - erstellter Pfad enthält nur kurze Dateinamen.
    %~aI        - erstellt die Dateiattribute von %I.
    %~tI        - erstellt Datum und Zeit von %I.
    %~zI        - erstellt die Dateigröße von %I.
    %~$PATH:I   - Durchsucht die in der PATH-Umgebungsvariablen
                   angegebenen Verzeichnisse und expandiert die erste
                   gefundene Datei %I zu dem vollständigen Dateinamen.
                   Wenn der Name der Umgebungsvariablen nicht definiert
                   ist oder diese Datei bei der Suche nicht gefunden wurde,
                   wird dieser Parameter zu einer leeren Zeichenfolge
                   expandiert.

Diese Parameter können auch miteinander kombiniert werden:

    %~dpI       - erstellt den Laufwerkbuchstaben und Pfad von %I.
    %~nxI       - erstellt den Dateinamen und die Dateierweiterung von %I.
    %~fsI       - Expandiert %I zu einem vollständigen Namen, der nur
                   kurze Dateinamen enthält.
    %~dp$PATH:I - Durchsucht die in der PATH-Umgebungsvariablen
                   angegebenen Verzeichnisse nach %I und erstellt den
                   Laufwerkbuchstaben und Pfad der ersten gefundenen Datei.
    %~ftzaI     - Expandiert %I zu einer Zeile, die der Ausgabe des DIR-
                   Befehls entspricht.

In den angegebenen Beispielen können %I und PATH durch andere gültige
Werte ersetzt werden. Der Ausdruck %~ wird durch einen gültigen Variablen-
namen für FOR abgeschlossen. Die Verwendung von Großbuchstaben für die Namen
von Variablen, wie z. B. %I, macht diese Ausdrücke leichter lesbar und
vermeidet Verwechslungen mit den eigentlichen Parametern.
Bitte warten ..
Mitglied: blacksun
13.02.2019 um 14:26 Uhr
Vielen Dank.

an for /? bin ich dran.
mir hat noch gefehlt wie man %%a und z.B. %~nI kombiniert, also z.B. kein %%~n%%a

kannst du mir noch sagen wie man
%~dp0
und
:~1
kombiniert (nicht in der for-Schleife)

hier ein Beispiel:
set LW1=y
set LW2=w
set LW3=v
set LW4=t


copy /Y "%~dp0*.bat" "%LW1%%~dp0:~1"
copy /Y "%~dp0*.bat" "%LW2%%~dp0:~1"
copy /Y "%~dp0*.bat" "%LW3%%~dp0:~1"
copy /Y "%~dp0*.bat" "%LW4%%~dp0:~1"
Bitte warten ..
Mitglied: freesolo
13.02.2019, aktualisiert um 14:36 Uhr
Zitat von blacksun:
mir hat noch gefehlt wie man %%a und z.B. %~nI kombiniert, also z.B. kein %%~n%%a
Steht da ja.
kannst du mir noch sagen wie man
%~dp0
und
:~1
kombiniert (nicht in der for-Schleife)

hier ein Beispiel:
set LW1=y
set LW2=w
set LW3=v
set LW4=t


copy /Y "%~dp0*.bat" "%LW1%%~dp0:~1"
copy /Y "%~dp0*.bat" "%LW2%%~dp0:~1"
copy /Y "%~dp0*.bat" "%LW3%%~dp0:~1"
copy /Y "%~dp0*.bat" "%LW4%%~dp0:~1"

%%~dp0 Bedeutet d = Drive, p = Path Du kombinierst also Laufwerksbuchstaben doppelt also falsch.
Was soll den im ersten Commandline Parameter %~1 stehen? nur ein Dateiname oder was?
"%LW1%:%~p0:%~1"
Beschreibe mal mit Worten was du überhaupt machen willst, damit man sich das hier nicht zusammenreimen muss...

Btw. wieso muss man immer noch mit Batch rumpfuschen?? Sowas macht man heutzutage mit Powershell ... Die Leute lernen es offensichtlich nie. Den Lehrern auf den Berufsschulen sollte man langsam mal in der Allerwertesten treten was sie da immer noch heranzüchten. ^^
Bitte warten ..
Mitglied: blacksun
13.02.2019, aktualisiert um 15:24 Uhr
es sind 2 Dinge die gemacht werden sollen. Das eine hat sich leider aus dem anderen so entwickelt.

Ursprünglich ging es nur darum:
https://administrator.de/forum/runas-befehl-batch-mehrere-befehle-ausf%C ...

es sollten mit runas nicht nur ein Kommando mit dem entsprechend eingegebenen User ausgeführt werden, sondern 4

Wie Du siehst wusste dort keiner mehr weiter.
Somit blieb mir nur die ebenfalls dort erwähnte Möglichkeit das ganze auf 2 Batch-Dateien aufzuteilen. Die 4 Befehle stehen in der 2. Batch, und runas ruft eben die 2. Batch auf.

Die Idee war nun die dass ich die 2. Batch so variabel gestalte dass sie ohne Anpassungen für verschiedene Anwendungen verwendet werden kann.

Die erste Batch heißt z.B. Notepad_start.bat
Die dazugehörige 2. Batch soll dann Notepad_start2.bat heißen

Dazu sollte eben
for %%a in ("%~dp0*start.bat") do set filename=%%~na
dienen

nun zum 2. Thema.
Hier geht es darum die beiden Batch-Dateien auf verschiedene Server zu kopieren.
dazu habe ich die kopieren.bat erstellt. Diese sieht so aus:

01.
@echo off
02.

03.
set LW1=y
04.
set LW2=w
05.
set LW3=v
06.
set LW4=t
07.

08.
for %%a in ("%~dp0*start.bat") do set filename=%%~na
09.
echo @echo off >"%~dp0%filename%2.bat"
10.
echo net use u: /d >>"%~dp0%filename%2.bat"
11.
echo net use w: /d >>"%~dp0%filename%2.bat"
12.
echo net use u: \\x.x.x.x\Home\S%username:~1% >>"%~dp0%filename%2.bat"
13.
echo net use w: \\x.x.x.x\Home\A%username:~1% >>"%~dp0%filename%2.bat"
14.
echo start "" "%%StartFile%%" >>"%~dp0%filename%2.bat"
15.

16.

17.
copy /Y "%~dp0*.bat" "%LW1%%~dp0:~1"
18.
copy /Y "%~dp0*.bat" "%LW2%%~dp0:~1"
19.
copy /Y "%~dp0*.bat" "%LW3%%~dp0:~1"
20.
copy /Y "%~dp0*.bat" "%LW4%%~dp0:~1"
Die kopieren.bat erzeugt also zunächst die 2. Batch neu (Beispielsweise Notepad_start2.bat), und kopiert Batch1 und Batch2, also Notepad_start.bat und Notepad_start2.bat auf die Server.

Die kopieren.bat soll also alle *.bat Dateien aus dem Pfad, aus dem kopieren.bat aufgerufen wird, auf die entsprechenden Server kopieren.

kopieren.bat liegt z.B. unter
c:\temp\notepadOrdner\
Die Datei Notepad_start.bat liegt ebenfalls darin.
Nun starte ich kopieren.bat
es wird die Notepad_start2.bat erzeugt.
*.bat soll nun von c:\temp\notepadOrdner\ kopiert werden auf
y:\temp\notepadOrdner\
w:\temp\notepadOrdner\
v:\temp\notepadOrdner\
t:\temp\notepadOrdner\

Die Idee war nun dass ich mit %%~dp0 den Pfad c:\temp\notepadOrdner\ nehme, die erste Stelle wegschneide, und dann somit die Zielpfade baue.
Bitte warten ..
Mitglied: freesolo
13.02.2019, aktualisiert um 15:42 Uhr
es sollten mit runas nicht nur ein Kommando mit dem entsprechend eingegebenen User ausgeführt werden, sondern 4
Das mappen ist ja eigentlich auch Blödsinn, nutze einfach UNC Pfade
notepad \\server\share\datei.txt
Wie Du siehst wusste dort keiner mehr weiter.
Wundert mich bei den Beiden nicht.

Für mehrere Befehle hintereinander die aufeinander warten:
01.
runas /user:DOMAIN\USER "cmd /c notepad \\server\share\sdfdsf.txt & notepad \\server\share\dfsgsfdg.txt"
oder parallel gestartete
01.
runas /user:DOMAIN\USER "cmd /c start \"\" notepad \\server\share\sdfdsf.txt & start \"\" notepad \\server\share\dfsgsfdg.txt"
usw.
Bitte warten ..
Mitglied: blacksun
13.02.2019, aktualisiert um 16:40 Uhr
Das mit dem Mappen und dem Aufruf einer Datei (notepad.exe "m:\Daten\meine Datei.txt") habe ich nur deshalb erwähnt um zu sehen wie da die Syntax aussehen muss.

Die eigentliche Anwendung benötigt tatsächlich 2 gemappte Laufwerke da die Anwendung mit mehreren Dateien auf dem Share arbeitet.
In der Anwendung kann ich kein UNC angeben, bzw. unsere Gruppenrichtlinien verhindern die Nutzung von UNC im Explorer.

Es müssen also tatsächlich vor dem Aufruf 2 Laufwerke gemappt werden, also zuerst 2 Buchstaben entmappen falls bereits belegt, dann 2LW Mappen und dann den Aufruf der Anwendung (Kyocera NetViewer)

und die Kombination runas und net use funktioniert leider nicht.

Meine Idee war für einen Test
01.
@echo off
02.
set StartFile=%PROGRAMFILES%\Kyocera\NetViewer\KNV\bin\Netviewer.exe
03.
echo %StartFile%
04.

05.
...
06.
:sUserKonto
07.
set /p BENUTZER="Bitte den Benutzernamen eines Ad-Admin-Accounts eingeben:"
08.
runas /env /savecred /user:%USERDOMAIN%\%BENUTZER% "cmd /c net use u: /d & net use w: /d & net use u: \\x.x.x.x\Home\S%username:~1% & net use w: \\x.x.x.x\Home\A%username:~1%" & start \"\" \"%StartFile%\""
Ich brauche also die synchrone Abarbeitung der 4 net use, und dann einen start "" "xx" damit die cmd NICHT offen bleibt bis die Anwendung geschlossen wird.

Das funktioniert so leider nicht.
Bitte warten ..
Mitglied: blacksun
14.02.2019 um 12:00 Uhr
Hallo,

ich bin jetzt nochmal die Syntax genau durchgegangen und nun funktioniert das mit dem runas

01.
set /p BENUTZER="Bitte den Benutzernamen eines Ad-Admin-Accounts eingeben: "
02.
runas /env /savecred /user:%USERDOMAIN%\%BENUTZER% "cmd /k net use u: /d & net use w: /d & net use u: \\x.x.x.x\Home\S%username:~1% & net use w: \\x.x.x.x\Home\A%username:~1% & start \"\" \"%StartFile%\" & exit"

was ich aber nicht verstehe beim Aufruf mit start "" "xx"

die " braucht man wenn im Pfad ein Leerzeichen enthalten ist was bei %PROGRAMFILES% leider der Fall ist.
nun zum Aufruf mit runas unter der Annahme dass Notepad.exe dort liegt:

01.
runas /user:DOMAIN\USER "cmd /c start \"\" "%PROGRAMFILES%\Notepad.exe"" 
funktioniert so

Wenn man der Notepad.exe Parameter mitgeben möchte, dann darf es keine " geben:
01.
runas /user:DOMAIN\USER "cmd /c start \"\" %PROGRAMFILES%\Notepad.exe /x" 
Das macht die einheitliche Verwendung des Batchfiles für Anwendungen mit und ohne Parameter schwierig.

Hättest Du mir eine Idee wie man das umgehen könnte?



Da der Aufruf mit runas mit mehreren Befehlen nun funktioniert brauche zwar das zweite Batch-File nicht, würde aber für die Zukunft dennoch gerne wissen wie man
%~dp0
und
:~1
kombiniert, sprich die Ausgabe, die %~dp0 liefert, um die erste Stelle kürzt.

Vielen Dank.
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Batch datei eine bestimmt Datei mit einer bestimmten software öffnen

gelöst Frage von Daoudi1973Batch & Shell3 Kommentare

Hallo zusammen, wir haben in der Arbeit Acrbat Reader als Standard Software um PDF-Dateien zu öffnen. meine Frage: wie ...

Batch & Shell

Wlan-adapter such algorithmus in batch

gelöst Frage von TicoWriteBatch & Shell7 Kommentare

Hallo zusammen, Ich möchte einen Wlan-adpater such algorithmus in batch erstellen, dazu fehlt mir aber der befehl in Dos. ...

Microsoft Office

Word bestimmt Sprache selbst

gelöst Frage von honeybeeMicrosoft Office1 Kommentar

Hallo, habe in Word 2016 ein nerviges Problem: Auf meinem Computer (Windows 10) sind zwei Sprachen installiert: Deutsch und ...

Batch & Shell

BATCH ini Datei Datei auslesen

gelöst Frage von Juergen42Batch & Shell2 Kommentare

Hallo zusammen, ich möchte eine ini Datei auslesen mit folgenden Aufbau INHALT DER INI ID=30 NAME="test1" PFAD="K:\Kontoauszug\Test1\*.pdf" PFAD_S="K:\Kontoauszug\Test1\Sicherung\" ID=28 ...

Neue Wissensbeiträge
Windows 7

Windows 7 u. Server 2008 (R2) SHA-2-Update kommt am 12. März 2019

Information von kgborn vor 1 TagWindows 75 Kommentare

Kleine Info für die Admins der oben genannten Maschinen. Ab Juli 2019 werden Updates von Microsoft nur noch mit ...

Firewall
PfSense 2.5.0 benötigt doch kein AES-NI
Information von ChriBo vor 2 TagenFirewall2 Kommentare

Hallo, Wie sich einige hier erinnern werden hat Jim Thompson in diesem Aritkel beschrieben, daß ab Version 2.5.0 ein ...

Internet
Copyright-Reform: Upload-Filter
Information von Frank vor 4 TagenInternet1 Kommentar

Hallo, viele Menschen reden aktuell von Upload-Filtern. Sie reden darüber, als wären es eine Selbstverständlichkeit, das Upload-Filter den Seitenbetreibern ...

Google Android

Blokada: Tracking und Werbung unter Android unterbinden

Information von AnkhMorpork vor 4 TagenGoogle Android1 Kommentar

In Ergänzung zu meinem vorherigen Beitrag: Blokada efficiently blocks ads, tracking and malware. It saves your data plan, makes ...

Heiß diskutierte Inhalte
Hardware
IT-Werkzeugkoffer bis 50,- EUR
gelöst Frage von departure69Hardware44 Kommentare

Hallo. Ich bin als IT-Systembetreuer einer Gemeinde zusätzlich auch der IT-Systembetreuer einer Grund- und Hauptschule. Dort muß ich jedoch ...

Netzwerke
Verteilung von Programmdaten außerhalb des internen Netzwerkes
Frage von mertaufmbergNetzwerke27 Kommentare

Guten Morgen liebe Administratoren, ich versuche zurzeit eine möglichst sichere und einfache Lösung zu suchen, um ein Programmverzeichnis über ...

Netzwerkmanagement
Richtfunknetzwerk mit vielen Hops stabiler gestalten
Frage von turti83Netzwerkmanagement22 Kommentare

Hallo, in meinem Dorf habe ich vor ca. einem Jahr ein Backbone aufgebaut um die Nachbarschaft mit Internet zu ...

Hyper-V
Intel MSC Raid 5 Rebuild
Frage von DannysHyper-V19 Kommentare

Hallo Community, Ich habe einen Modul Server von Intel in Betrieb. Dort ist eine Festplatte aus dem Raid 5 ...