Jakiś czas tem prosiłem was o pomoc w doborze programu do importowania zdjęć. Udało mi sie napisać skryp w poweshell który spełnia wszystkie moje oczekiwania. Ale mam problem z jego uruchamianiem. Chciałbym aby startował on jak uruchomienie normalnego pliku. zrobiłem wg instrukcji
Utworz skrot,
W skrocie --> Wlasciwosci
i w elemencie docelowym dopisac przed sciezka: powershell.exe -ExecutionPolicy Bypass -File .........
i czarne okno pojawia sie na 1s i tyle
Z pozycji powershella skrypt sie uruchamia
Oto skrypt:
# Ustawienia
$destinationPath = "C:\Zdjecia" # Zmień na odpowiednią ścieżkę docelową
# Funkcja do znalezienia karty SD
function Get-SDCardPath {
$drives = Get-PSDrive -PSProvider FileSystem
foreach ($drive in $drives) {
$dcimPath = Join-Path -Path $drive.Root -ChildPath "DCIM"
if (Test-Path $dcimPath) {
return $drive.Root
}
}
return $null
}
# Funkcja do importowania zdjęć
function Import-Photos {
param (
[string]$source,
[string]$destination
)
# Sprawdzenie, czy źródło istnieje
if (-Not (Test-Path $source)) {
Write-Host "Źródło nie istnieje: $source"
return
}
# Pobranie zdjęć
$photos = Get-ChildItem -Path $source -Include *.jpg, *.jpeg, *.png -Recurse
if ($photos.Count -eq 0) {
Write-Host "Brak zdjęć do zaimportowania."
return
}
# Wyświetlenie zdjęć do zaimportowania
Write-Host "Zdjęcia do zaimportowania:"
$photos | ForEach-Object { Write-Host $_.FullName }
# Zapytanie użytkownika
# $userResponse = Read-Host "Czy chcesz zaimportować te zdjęcia? (T/N)"
# if ($userResponse -ne 'T') {
# Write-Host "Importowanie anulowane."
# return
# }
# Importowanie zdjęć
foreach ($photo in $photos) {
$dateTaken = (Get-Date $photo.LastWriteTime).ToString("yyyy-MM-dd")
$folderPath = Join-Path -Path $destination -ChildPath $dateTaken
# Utworzenie folderu, jeśli nie istnieje
if (-Not (Test-Path $folderPath)) {
New-Item -ItemType Directory -Path $folderPath | Out-Null
}
# Generowanie unikalnej nazwy pliku
$newFileName = [System.IO.Path]::GetFileNameWithoutExtension($photo.FullName) + "_" + [guid]::NewGuid().ToString() + [System.IO.Path]::GetExtension($photo.FullName)
$newFilePath = Join-Path -Path $folderPath -ChildPath $newFileName
# Kopiowanie pliku
Copy-Item -Path $photo.FullName -Destination $newFilePath
Write-Host "Skopiowano: $newFilePath"
}
Write-Host "Importowanie zakończone."
}
# Znalezienie karty SD
$sdCardPath = Get-SDCardPath
if ($sdCardPath) {
Write-Host "Znaleziono kartę SD w: $sdCardPath"
Import-Photos -source (Join-Path -Path $sdCardPath -ChildPath "DCIM") -destination $destinationPath
} else {
Write-Host "Nie znaleziono karty SD."
}
Start-Process explorer.exe $destinationFolder
#programowanie #pracbaza
@majlu11 - próbowałeś tak:
powershell.exe -command "& 'C:\A path with spaces\MyScript.ps1' -ExecutionPolicy Bypass"
@koszotorobur wkleic to do skryptu?
@majlu11 - wkleić do skrótu.
@koszotorobur bez zmian....
@majlu11 - to utwórz plik .bat z poniższą zawartością w tym samym folderze gdzie Twój skrypt PowerShella - i uruchom ten plik BAT dwuklikiem:
powershell -ExecutionPolicy Bypass -File .\MyPowershellScript.ps1
albo
start powershell -command "& '.\MyPowershellScript.ps1' -ExecutionPolicy Bypass"
@koszotorobur tak tez próbowałem i nic. Juz mi brakuje pomysłów.
@majlu11 - pewnie coś zwanego "Execution Policy" Ci to blokuje - poczytaj co to jest i jak to zmienić: https://learn.microsoft.com/en-us/previous-versions//bb613481(v=vs.85)?redirectedfrom=MSDN#how-to-allow-scripts-to-run
@majlu11 zapisz plik w jakimś folderze, naciśnij prawym przyciskiem na folderze, otwórz tu terminal, włącz skrypt z terminala i powiedz jaki bład jest napisany
@entropy_ z terminala działa mi normalnie
@majlu11 nie rozumiem, destination i source masz zawsze rózne czy takie same?
Bo jak takie same to włączaj skrypt a nie skrót
@majlu11 prawym i run batch script
@entropy_ ja jestem laikiem, chciałem napisać skrypt który wykryje kartę SD (o różnej nazwie) i zaimportuje z niej zdjęcia tworząc folder z datą wykonania zdjęcia we wskazanym miejscu. I tak mi to działa, ale chciałbym uruchamiać ten skrypt podwójnym kliknięciem żeby był dostępny dla każdego w firmie kto będzie z niego korzystał.
@majlu11 skoro działa z terminala to spróbuj tak:
Zostaw ten skrypt gdzieś, pociągnij go prawym przyciskiem myszki na pulpit, wybierz utwórz tutaj skrót.
naciśnij prawym, właściwości i dopisz na początku
powershell
Dziekuje wszystkim za pomoc. Udało się wszystko działa. A co sie okazało ze na komputerze jest windows powershell i powershell 7 na którym mi wszystko działało. Ten drugi jednak miał inna scieżke dostępu. po zmianie scieżki na "C:\Program Files\PowerShell\7\pwsh.exe" -ExecutionPolicy Bypass wszystko zaczęło chulać.
Jeszcze raz dzięki za dobre rady.
Zaloguj się aby komentować