evinben
Goto Top

Alle WLAN-Profile aus einem Ordner per Batch importieren

Hi Gemeinde,

ich bin noch nicht so ganz mit Batch vertraut. Wisst ihr wie die Syntax in einer Batch-Datei lauten soll, um auf einen Ordner zugreifen und alle sich dort befindende Dateien mit einer bestimmten Erweiterung nacheinander abzufragen?

Konkret zu dem Vorhaben:

WLAN-Profil exportieren:
Folgender Kommandozeilenbefehl speichert ein WLAN-Profil als XML-Datei in dem angegebenen Pfad (das bei Bedarf mit dem Import-Befehl zurück importiert oder an jedem anderen Client unter Windows importiert werden kann)
NETSH WLAN export profile folder="D:\Probe" name="HP-Notebook" interface=  

WLAN-Profil importieren:
Ich versuche nun Profile (also nur XML-Dateien) aus dem hier eingebauten Pfad abzufragen und alle diese nacheinander abzuarbeiten und zu importieren. Anbei ist ein Beispiel mit einem Profil, das problemlos aus dem angegebenen Pfad in der Netzwerk- und WLAN-Adapter-Ebene importiert wird:
NETSH WLAN add profile filename="D:\Intel WLAN-Adapter_Profile und Einstellungen am M65\RouterZuHause.xml" interface="WLAN-Adapter Intel 6300" user=all  

Auf der Weise mit Wildcard kann leider nicht so einfach auf alle Profile/XML-Dateien zugegriffen werden, um alle diese zu importieren ;)
NETSH WLAN add profile filename="D:\Intel WLAN-Adapter_Profile und Einstellungen am M65\*.xml" interface="WLAN-Verbindung" user=all  


(Folgender Befehl speichert alle Profile in dem relativen Pfad C:\Users\akteller Benutzer:
NETSH WLAN export profile

Danke euch für die Hilfe.
Kommentar vom Moderator Dani am May 05, 2011 um 11:41:22 Uhr
Formatierungen hinzugefügt.

Content-Key: 165710

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

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

Member: Dani
Dani May 05, 2011 at 11:47:56 (UTC)
Goto Top
Hi!
Auf der Weise mit Wildcard kann leider nicht so einfach auf alle Profile/XML-Dateien zugegriffen werden, um alle diese zu importieren ;)
Das kann nicht funktionieren. In der Hilfe steht: "Der Parameter "filename" ist erforderlich. Er ist der Name der XML-Datei, die die mit Profildaten enthält.".

Du wirst um den Befehl noch eine Schleife bauen müssen. Etwa so:
@echo off

set wlan_file_path=D:\Intel WLAN-Adapter_Profile und Einstellungen am M65

for /f "tokens=1 delims=" %%i in ('dir /b "%wlan_file_path%\*.xml" ') do NETSH WLAN add profile filename="%wlan_file_path%\%%i.xml" interface="WLAN-Verbindung" user=all  

Grüße,
Dani
Member: evinben
evinben May 05, 2011 at 12:37:25 (UTC)
Goto Top
danke dir Dani,

bei mir funktioniert es leider so nicht. Immer wieder das gleiche Problem mit "&" in dem Pfad.

ich habe ein bisschen weiter experimentiert und so funktioniert es nun:


cd /d "E:\Backup~1\Netzwerkeinstellungen\WLAN-Adapter - Profile und Einstellungen\am Notebook M65"

for %%f in (*.xml) do netsh wlan add profile filename="%%f" user=all

pause


Und das Gleiche aber mit deiner Variante funktioniert es leider nicht. Es zeigt mir, dass der Pfad nicht gefunden werden kann, oder so:


@echo off

set Profile_Path="E:\Backup~1\Netzwerkeinstellungen\WLAN-Adapter - Profile und Einstellungen\am Notebook M65"

for /f "tokens=1 delims=" %%i in ('dir /b "%Profile_Path%\*.xml" ') do NETSH WLAN add profile filename="%Profile_Path%\%%i.xml" user=all

pause

Wenn ich "@echo off" und Anführungszeichen aus dem Pfad raus nehme, dann werden zwar alle Profile im CMD nacheinander zeilenweise abgearbeitet (der vollständige Pfad zu dem jeweiligen Profil wird angezeigt) aber in jeder Zeile ist dann die folgende Fehlermeldung zu sehen:
Das System kann die angegebene Datei nicht finden.

Ich habe bisher nicht so richtig verstanden, was ich generell bei einem Code mit so einem Sonderpfad, außer die obligatorische Verwendung von Kurznamen, noch anders beachten soll.

Andere Frage:

1. wie können analog dazu ebenso mit einer Schleife alle WLAN-Profile gelöscht werden? (Klar wird hier die Angabe des Netzwerkadapters Pflicht - ohne würde Windows gar nicht erlauben)

2. Ist es überhaupt möglich mit einem Befehl die Netzwerkerkennung auf "An" bzw. "Aus" zu setzen? (hier muss ich zugeben, dass ich nur im NETSH-Bereich recherchiert habe).

Danke für die Aufklärung.
Member: Dani
Dani May 05, 2011 at 19:06:14 (UTC)
Goto Top
Ich habe eben meinen Quellcode mal getestet und so scheint es zu funktionieren:
@echo off

set wlan_file_path=D:\WLAN-Adapter - Profile und Einstellungen\am Notebook M65
for /f "tokens=1 delims=" %%i in ('dir /b "%wlan_file_path%\*.xml" ') do echo NETSH WLAN add profile filename="%wlan_file_path%\%%i.xml" interface="WLAN-Verbindung" user=all  

wie können analog dazu ebenso mit einer Schleife alle WLAN-Profile gelöscht werden
Schau dir mal netsh wlan delete profile an...

Ist es überhaupt möglich mit einem Befehl die Netzwerkerkennung auf "An" bzw. "Aus" zu setzen? (hier muss ich zugeben, dass ich nur im NETSH-Bereich recherchiert habe).
Hmm... netsh wlan online / offline... vllt. ?!
Member: evinben
evinben May 05, 2011 at 20:01:03 (UTC)
Goto Top
bei mir funktioniert deine Variante leider nicht. Ich habe 1:1 den Code übernommen (Adapternamen und Pfade stimmen überein). Sowohl mit als auch ohne "echo" dazwischen funktioniert es definitiv bei mir nicht.

Schau dir mal netsh wlan delete profile an..

klar habe ich es vorher nachgeschaut bevor ich hier meine Fragen stelle und auf der Weise gepfuscht:
for /f "skip=2 tokens=5* delims=: " %%i in ('NETSH WLAN show profiles') do NETSH WLAN delete profile name="%%i %%j"
Na ja es funktioniert so ungefähr. Z. B. ein Profil mit so einem Namen, wie
"Fritz!Box Fon WLAN 7170"
wird nicht gelöscht und daher habe ich zusätzlich den folgenden Satz eingebaut (ich vermute, dass sogar eventuell andere Profile mit anderen Sondernamen nicht richtig gelöscht werden, aber solange Microsoft keine Änderung in der Beschreibung vornimmt, sollte es so auf der Weise ungefähr funktionieren):
for /f "skip=2 tokens=5* delims=: " %%i in ('NETSH WLAN show profiles') do NETSH WLAN delete profile name="%%i%%j"
Und nun werden alle meine verwendete Profile (also mit meinen getesteten Benennungen zumindest) erfolgreich gelöscht.
Soll ich es wirklich so lassen? Über Kontrolle durch die Spezialisten hier würde ich mich freue und bedanke mich echt herzlich.
(ich bin kein Informatiker oder so).
Member: Philbert
Philbert Nov 29, 2018 at 12:07:31 (UTC)
Goto Top
Das "Echo" muss raus und die Dateiendung ist doppelt.
So funktionierts:
(Batchdatei liegt im Root vom USB-Stick; exportierte Profile im Ordner "wlanprofile")
::-- Alle Wlan Profile aus dem Ordner "wlanprofile" eintragen 
@echo off
set wlan_file_path=%~d0\wlanprofile
for /f "tokens=1 delims=" %%i in ('dir /b "%wlan_file_path%\*.xml" ') do NETSH WLAN add profile filename="%wlan_file_path%\%%i" user=all  
pause

Der Export der Profile vorher würde so aussehen:
::-- Wlan Profile auslesen und in Ordner "wlanprofile" schreiben  
@echo off
netsh wlan export profile key=clear folder=%~d0\wlanprofile
pause
Member: evinben
evinben Nov 29, 2018 updated at 14:12:29 (UTC)
Goto Top
Hallo @Philbert,

Das "Echo" muss raus ...

Mit ECHO wird in den meisten Beispielen wie auch hier bloß nur hierfür benutzt, um den Code durch den Anwender bewusst einschalten zu lassen, um so ungewollte Änderungen an seinem oder am Test-System des Autors zu vermeiden. Also erstmals rein als visuelles Beispiel in der CMD (Befehlsinterpreter).

So funktioniert es nicht:

"set wlan_file_path=%~d0\wlanprofile "  

da erstens hier das 0. Argument so %~d0\ keinen korrekten Pfad ermöglicht und zweitens ganz am Ende ein Leerzeichen vorhanden ist, was ebenso die Ausführung des Codes verhindert.

Eine besserer Variante ist z. B. etwa wie
PushD %~dp0
set wlan_file_path=WLANprofile

um so ein Vermischen des 0. Arguments %~d0 mit dem nachgestellten Pfad zu vermeiden, da hier ja das Schrägstrich zwingend weggelassen werden muss, weil es bereits im Argument integriert ist, da das alte System halt so geschaffen ist:
Wären die Argumente intern vom Anfang an ohne dem integrierten Schrägstrich (Backslash) ausgegeben, wäre es für Anwender visuell und vom Verständnis her viel einfacher und so Millionen von Fehler im Laufe der letzten Jahren in der Batch-Welt vermieden können. Aber wer ist schon so klug, um im Voraus alles fehlerfrei programmieren zu können. Daher Änderungen müssen schnell durchgeführt werden, bevor sich das System tief und überall etabliert hat, und hier wurde jedoch keine Besserung durchgeführt und nach so viele Jahren ist es schon zu spät. Ein neues System muss her: Batch 2.0

Genau dasselbe gilt auch für
"netsh wlan export profile key=clear folder=%~d0\wlanprofile "  

Korrekt, aber nicht visuell empfehlenswert wäre es in etwa:
"netsh wlan export profile key=clear folder=%~dp0wlanprofile"  

Gruß
evinben
Member: Philbert
Philbert Dec 07, 2018 at 11:24:58 (UTC)
Goto Top
Hallo evinben,

nett dass da noch jemand drauf antwortet... hätte ich gar nicht erwartet nachdem ich in ein uraltes Thema geschrieben hatte.

Das mit dem "Echo" als Sicherungskomponente wusste ich nicht. Hatte mich schon gewundert wie das da reingekommen ist...
Deine anderen Anmerkungen sind mir allerdings gänzlich unverständlich:
1. gibt es bei mir nirgends dieses Leerzeichen am Ende der Zeile. Auch in meinem Posting ist es nicht (siehe -> Quelltext). Ich weiss nicht wo Du das her hast.
2. Die Variable "%~d0" ergibt beispielsweise "D:" aber nicht "D:\". Insofern ergibt "folder=%~dp0wlanprofile" auch das Ergebnis "D:wlanprofile". Wäre also falsch.
3. Es funktioniert bei mir einwandfrei und zwar exakt so wie ich geschrieben hatte. Das hab ich selbstverständlich vorher getestet (auf win 7 und 10)!

Viele Grüße
Member: evinben
evinben Dec 07, 2018 updated at 18:09:41 (UTC)
Goto Top
Hallo Philbert,

1. gibt es bei mir nirgends dieses Leerzeichen am Ende der Zeile. Auch in meinem Posting ist es nicht (siehe -> Quelltext). Ich weiss nicht wo Du das her hast.

Ja, über die Option Quelltext werden die angesprochenen Codezeilen ohne das Leerzeichen am Ende angezeigt, jedoch im Forum-Text direkt leider mit, weswegen du natürlich nichts dafür hast. Es wäre aber Wert dies als ein Optimierungsvorschlag den Administratoren dieses Forums zu melden, um Verwirrungen vorzubeugen.
Bereits durch den Administrator optimiert - Dank @Frank!

2. Die Variable "%~d0" ergibt beispielsweise "D:" aber nicht "D:\". Insofern ergibt "folder=%~dp0wlanprofile" auch das Ergebnis "D:wlanprofile". Wäre also falsch.

Ja, speziell bei dieser Konstruktion mit dem Wurzelverzeichnis, ist es so in Ordnung. Oben in meinem Beispiel mit %~d0 habe ich mich auf die Logik von %~dp0 (Directory + Path) bezogen, weil wenn als letztes nur der Path-Parameter sitzt, wird der Backslash hinzugefügt und anbei all dies veranschaulicht.

Im folgenden Beispiel wird einfach eine beliebige Datei auf die folgende Batch-Datei etwa per Drag&Drop übergeben und unten ist die Skript-Ausgabe:

Batch-Datei
@echo off
@prompt -$G
chcp 65001 >nul

echo Ergebnis des 0. Arguments (Pfadbestandteile dieser Batch-Datei):
echo %%~d0:
echo %~d0
echo.
echo %%~dp0:
echo %~dp0
echo.
echo %%~dpnx0:
echo %~dpnx0
echo.
echo Ergebnis des 1. Arguments
echo (z.B. Pfad einer Datei, welche etwa per Drag^&Drop an die Batch-Datei übergeben worden ist)
echo %%~d1:
echo %~d1
echo.
echo %%~dp1:
echo %~dp1
echo.
echo %%~dpnx1:
echo %~dpnx1

echo.
pause >nul

Ausgabe:
Ergebnis des 0. Arguments (Pfadbestandteile dieser Batch-Datei):
%~d0:
D:

%~dp0:
D:\

%~dpnx0:
D:\DragDropp.bat

Ergebnis des 1. Arguments
(z.B. Pfad einer Datei, welche etwa per Drag&Dropp an die Batch-Datei übergeben worden ist)
%~d1:
D:

%~dp1:
D:\

%~dpnx1:
D:\TestArguments.txt

In deinem Falle funktioniert es mit "%~d0" und wenn du damit so besser klar kommst, kannst du es so auch belassen, empfehlen werde es aber nicht. Lieber stattdessen %~dp0 verwenden (auf den Ordner über %~dp0wlanprofile oder über relative Pfade (.\wlanprofile\) zugreifen). So funktioniert der Code überall robust, auch wenn du dein Projekt in Unterverzeichnissen verschieben würdest! Es ist robuster und ohne Überraschungen.

Gruß
Evinben
Member: evinben
evinben Dec 07, 2018 updated at 18:04:02 (UTC)
Goto Top
@Frank hat das Problem mit den unerwünschten Leerzeichen behoben (welche sich bisher am Ende mancher Codezeilen direkt im Forum-Text eingeschlichen haben, also obwohl diese Quelltext nicht vorhanden waren)! Nun erscheinen keine sporadische Leerzeichen mehr, welche bei manchen bisher zu Überraschungen geführt haben face-wink - bewusst oder unbewusst.

Leerzeilen werden aus technischen Gründen mit Leerzeichen versehen, beeinträchtigt ja in allermeisten Fälle die Funktion des Codes nicht und erfreut die Anwender beim Schnell-Kopieren direkt aus dem Forum, ab nun ohne Überraschungen (zudem bliebt ja der Quelltext nach wie vor 1:1).