Witam

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
koszotorobur

@majlu11 - próbowałeś tak:

powershell.exe -command "& 'C:\A path with spaces\MyScript.ps1' -ExecutionPolicy Bypass"

majlu11

@koszotorobur wkleic to do skryptu?

koszotorobur

@majlu11 - wkleić do skrótu.

majlu11

@koszotorobur bez zmian....

koszotorobur

@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"

majlu11

@koszotorobur tak tez próbowałem i nic. Juz mi brakuje pomysłów.

entropy_

@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

majlu11

@entropy_ z terminala działa mi normalnie

entropy_

@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

entropy_

@majlu11 prawym i run batch script

majlu11

@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ł.

entropy_

@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

majlu11

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ć