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

Komentarze (14)

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ć