chkdsk
Goto Top

Batch: Datei kopieren mit Abfrage über Windows Explorer Fenster

Hallo Zusammen,

ich habe mir eine Batch geschrieben, welche mir eine vorher definierte Datei auf einen PC kopiert, den ich via Variablenabfrage direkt in die Batch eingebe.
Gibt es eine Möglichkeit/einen Befehl, dass anstatt der festgelegten Datei ein Explorerfenster aufgeht und ich zu der gewünschten Datei navigieren kann?

Ich hoffe ihr versteht was ich meine. Ich kann auch gerne mein bisheriges Skript hier einstellen.

Viele Grüße

Content-ID: 466094

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

Ausgedruckt am: 21.11.2024 um 18:11 Uhr

erikro
erikro 26.06.2019 um 11:34:29 Uhr
Goto Top
Moin,

Zitat von @chkdsk:

Hallo Zusammen,

ich habe mir eine Batch geschrieben, welche mir eine vorher definierte Datei auf einen PC kopiert, den ich via Variablenabfrage direkt in die Batch eingebe.
Gibt es eine Möglichkeit/einen Befehl, dass anstatt der festgelegten Datei ein Explorerfenster aufgeht und ich zu der gewünschten Datei navigieren kann?

Als Batch wüsste ich nicht. Mit der Powershell kein Problem. Wie ist hier gut beschrieben:
https://www.digicomp.ch/blog/2014/06/02/tipp-zum-windows-powershell-file ...

Ich hoffe ihr versteht was ich meine. Ich kann auch gerne mein bisheriges Skript hier einstellen.

Das solltest Du tun. face-wink

hth

Erik
chkdsk
chkdsk 26.06.2019 um 11:37:19 Uhr
Goto Top
Vielen Dank für die schnelle Antwort. Werde mir das auf jeden Fall mal ansehen face-smile

Hier mal mein bisheriges Skript...funktioniert auch wunderbar, nur das ich eben das File jedes Mal vorher festlegen muss.
@echo off
set /p target=(L) Laptop oder (D) Desktop: 
echo.
set /p ID=Gebe die Geraete-ID ein:
echo.
IF /I "%target%"=="L" goto :Laptop  
IF /I "%target%"=="D" goto :Desktop    
GOTO ENDE

:Laptop
copy \\test\test\test.txt \\%ID%\C$\Temp
GOTO ENDE

:Desktop
copy \\test\test\test.txt \\%ID%\C$\Temp
GOTO ENDE

:ENDE
pause
colinardo
colinardo 26.06.2019 aktualisiert um 13:45:09 Uhr
Goto Top
Servus,
das gibt's einige Varianten. Für dich am einfachsten wäre es das Skript oder eine Verknüpfung in den "SendTo" Ordner zu packen und dann im Explorer die Datei übers Kontextmenü an das Skript zu senden. Im Skript kannst du dann mit %~1 auf das übergebene File zugreifen.
set "filepath=%~1"  
echo %filepath%
Alternativ kann man sich natürlich auch der Powershell in der Batch behelfen
@echo off
for /f "tokens=* delims=" %%a in ('powershell -EP ByPass -NoP -C "Add-Type -A System.Windows.Forms; $dlg = New-Object System.Windows.Forms.OpenFileDialog; if($dlg.ShowDialog() -eq 'OK'){return $dlg.FileName}"') do set "filepath=%%a"  
if "%filepath%" NEQ "" (  
	echo Pfad: %filepath%
) else (
  echo Keine Datei selektiert.
)
usw.

Grüße Uwe

btw. wenn nur Dateien kopiert werden sollen, würde es eigentlich auch reichen zwei Verknüpfungen zum Ordner in den SendTo Ordner zu werfen face-wink, Skript überflüssig.
chkdsk
chkdsk 03.07.2019 aktualisiert um 09:09:29 Uhr
Goto Top
Moin Uwe,

vielen Dank dafür.

:Beginn
@echo off
set /p target=(L) Laptop oder (D) Desktop: 
echo.
set /p ID=Gebe die Geraete-ID ein:
echo.
IF /I "%target%"=="L" goto :Laptop  
IF /I "%target%"=="D" goto :Desktop    


:Laptop
for /f "tokens=* delims=" %%a in ('powershell -EP ByPass -NoP -C "Add-Type -A System.Windows.Forms; $dlg = New-Object System.Windows.Forms.OpenFileDialog; if($dlg.ShowDialog() -eq 'OK'){return $dlg.FileName}"') do set "filepath=%%a"  
if "%filepath%" NEQ "" (  
	echo Pfad: %filepath%
) else (
  echo Keine Datei selektiert.
)
copy %filepath% \\%ID%\C$\Temp
echo.
GOTO Repeat


:Desktop
for /f "tokens=* delims=" %%a in ('powershell -EP ByPass -NoP -C "Add-Type -A System.Windows.Forms; $dlg = New-Object System.Windows.Forms.OpenFileDialog; if($dlg.ShowDialog() -eq 'OK'){return $dlg.FileName}"') do set "filepath=%%a"  
if "%filepath%" NEQ "" (  
	echo Pfad: %filepath%
) else (
  echo Keine Datei selektiert.
)
copy %filepath% \\%ID%\C$\Temp
echo.
GOTO Repeat

echo.
:Repeat
set /p Repeat=Datei auf weiteren PC kopieren? (J) Ja oder (N) Nein:  
echo.
IF /I "%Repeat%"=="J" goto :Beginn  
IF /I "%Repeat%"=="N" goto :ENDE  

:ENDE
pause

Laptop oder Desktop (soll vorher abgefragt werden)
Dateiabfrage
Kopieren in den vordefinierten Ordner.


Bei einigen Dateien kommt die Fehlermeldung: Das System kann die angegebene Datei nicht finden.

Ich kann noch nicht nachvollziehen bei welchen Datei er meckert und bei welchen nicht.
colinardo
Lösung colinardo 03.07.2019 aktualisiert um 09:43:53 Uhr
Goto Top
Zitat von @chkdsk:
Bei einigen Dateien kommt die Fehlermeldung: Das System kann die angegebene Datei nicht finden.

Ich kann noch nicht nachvollziehen bei welchen Datei er meckert und bei welchen nicht.
Ich schon, bei deinem Code sind das alle Dateien mit Leerzeichen im Pfad face-wink. Deswegen die Variable %filepath% und alle anderen Pfade immer in "Anführungszeichen" packen!!
copy "%filepath%" "\\%ID%\C$\Temp"

Außerdem stehen deine Copy Befehle an der falschen Stelle, denn nur wenn der Pfad ja nicht leer ist sollte kopiert werden, also wenn der der User z.B. auf Abbrechen klickt, tritt so eine Situation ein, deswegen kommt der Copy Befehl in die erste Verzweigung der IF-Abfrage bei der auch sichergestellt ist das der Pfad nicht leer ist!
chkdsk
chkdsk 03.07.2019 um 09:51:08 Uhr
Goto Top
Stimmt, du hast vollkommen Recht mit den " ". Habe ich ja oben bei "%target%" auch so gemacht face-smile

Wenn ich jetzt in ein Systemverzeichnis kopieren möchte, geht das natürlich nicht weil ich keine Berechtigung habe. Führe ich die Batch als Admin aus, geht das...ist natürlich logisch. baue ich jetzt aber zu Beginn der Batch eine Abfrage ein, beendet sich die Batch...könntest du mir da vielleicht auch noch einen Tipp geben

@echo off

 call :isAdmin

 if %errorlevel% == 0 (
    goto :run
 ) else (
    echo Requesting administrative privileges...
    goto :UACPrompt
 )

 exit /b

 :isAdmin
    fsutil dirty query %systemdrive% >nul
 exit /b

 :run
colinardo
Lösung colinardo 03.07.2019 aktualisiert um 10:05:23 Uhr
Goto Top
Füge folgendes in den Kopf deines Skriptes ein
@echo off & setlocal
net session >nul 2>&1 || (
  echo CreateObject^("Shell.Application"^).ShellExecute "%~0", "", "", "runas", 1 >"%temp%\runasadmin.vbs"  
  "%temp%\runasadmin.vbs"  
  exit /b
)
echo Alles was hier kommt wird elevated ausgeführt
Der Code prüft ob das Skript bereits elevated läuft, wenn nicht, startet sich die Batch erneut über ein temporäres VBS selbst elevated und triggert die UAC zum Bestätigen der Elevation. Alles was an Code dahinter kommt läuft dann elevated, sofern der User die UAC positiv bestätigt, oder die Batch schon elevated gestartet wurde.

p.s. Das ist so langsam ziemlich OffTopic, also beim nächsten mal neuen Thread oder Suchfunktion hier im Forum bitte, Danke.

Und bitte noch als gelöst markieren. Merci!
chkdsk
chkdsk 03.07.2019 um 10:29:45 Uhr
Goto Top
Ich danke dir vielmals. Hat alles wunderbar funktioniert. .-)