Wpis z mikrobloga

Jak w #powershell na Windows wylistować sobie rekurencyjnie wszystkie pliki i foldery w danej lokalizacji, ale ze ścieżką relatywną do lokalizacji, w której uruchamiany jest skrypt?

To poniżej, to jest w zasadzie dokładnie to co potrzebuję, tylko z jednym wyjątkiem: directoryname zwraca całą ścieżkę dostępu do każdego elementu zaczynając od dysku, na którym się znajduje (czyli get-location, np.: d:\folder1\folder-Z), a ma nie zawierać tego, co z nawiasie, czyli np .\plik-1-z-folderu-Z.pdf (a nie d:\folder1\folder-Z\plik-1-z-folderu-Z.pdf).

Get-ChildItem -Recurse | Select-Object directoryname, basename, length, lastwritetime | Export-Csv baza.csv -Encoding utf8 -NoTypeInformation
#windows #informatyka
  • 14
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@chilling: o dzięuję pięknie. Tak chciałbym otrzymać od razu całość w jednym rzucie jeśli możliwe.
Tylko o ile to pierwsze ładnie listuje same foldery tak jak chcę, o tyle to drugie już mi nie zapisuje całość poprawnie do pliku csv, tylko jakieś puste przestrzenie się w nim generują i co ileś linii jakaś liczba w cudzysłowie.
U Ciebie działa poprawnie ta druga wersja z eksportem od razu do csv?
  • Odpowiedz
Panowie, wiecie co, ja to zrobię sobie w PHP. Będzie mniej wygodne, ale powinno wystarczyć na moje potrzeby. Nie marnujcie już na to czasu, chyba, że dla sportu ;)

@adibor: gdy odpalę Powershella w d:\folder1\folder2\folder3, to wówczas (uwzględnię już formatowanie csv dla dwóch z czterech kolumn, które potrzebuję):
  • Odpowiedz
@kaktus_z_ostrymi_kolcami:

$ScriptDir = Split-Path $script:MyInvocation.MyCommand.Path
$path=$scriptdir.replace("\","\")
gci -r |select @{l="directory";e={$_.directoryname -replace "$path" -replace "^\"}},basename,length,lastwritetime | Export-Csv baza.csv -Encoding utf8 -NoTypeInformation

to jak chcesz mieć całą ścieżkę, a jak tylko nazwę folderu to (na podstawie tego, co
  • Odpowiedz
@adibor: coś jeszcze nie gra (pierwsze zgłasza mi błąd: Split-Path : Cannot bind argument to parameter 'Path' because it is null.).
A w drugim do kolumny BaseName trafiają zarówno nazwy folderów (gdy skanowanym elementem jest folder) jak i plików. A właśnie BaseName ma to być puste, gdy jest folder (i jego nazwa ma trafiać do BaseName). Ale tak się dzieje nawet w całkiem pierwszym przykładzie z mojego pierwszego wpisu.
Dobra,
  • Odpowiedz
coś jeszcze nie gra (pierwsze zgłasza mi błąd: Split-Path : Cannot bind argument to parameter 'Path' because it is null.)


@kaktus_z_ostrymi_kolcami:

Aha, ten pierwszy działa tylko jak uruchamiasz to jako skrypt. Gdy uruchamiasz prosto z konsoli, to pierwszą linijkę musisz zastąpić tym

$ScriptDir
  • Odpowiedz