Próbuję rekurencyjnie skopiować pliki i zmienić ich nazwy.Zmień nazwę po skopiowaniu przy użyciu programu Power Shell
Moje foldery mają plik o tej samej nazwie, więc muszę zmienić jego nazwę w momencie, gdy jest on kopiowany.
Ale wciąż stoję w obliczu problemu. Oto mój kod. Powinien znaleźć plik CopyForBuild.bat i skopiować go do folderu E: \ CopyForBuild. Po skopiowaniu, pierwszym plikiem powinien być Copyforbuild1.txt, drugim będzie CopyforBuild2.txt i tak dalej.
Oto mój kod. Gdzie ja zawodzę?
$File = Get-ChildItem -Path V:\MyFolder -Filter CopyForbuild.bat -Recurse
$i=1
Foreach ($f in $File)
{
Copy-Item $f "E:\copyforbuild\"
Rename-Item -path "E:\Copyforbuild\"+"$f" -newname "CopyForbuild"+"$i"+".txt"
$i = $i+1
}
Dlaczego nie proces wszystko po jednym na raz (i pamiętaj, że zmienne otrzymują wartości domyślne): 'Get-ChildItem -Path V: \ MyFolder -filt CoptForBuild.bat -rec | Copy-Item -dest {"E: \ copyforbuild \" + $ _. BaseName + ($ i ++) + ". Txt"} '. (Pliki cmdlet z parametrami, które nie pobierają obiektu typu, np. Miejsce docelowe Copy-Item, mają wbudowane dla siebie za pomocą nawiasów klamrowych, więc nie ma potrzeby, aby pętla określała miejsce docelowe.) – Richard
Kolego, To rzuca wyjątek . "Copy-Item: nie można powiązać argumentu z parametrem" Path ", ponieważ ma on wartość NULL." $ Plik nie zawiera żadnych pozycji, gdy określono "*. *" – Samselvaprabu
$ Plik = Get-ChildItem -Path "V: \ MójFolder \\ *. *" -Filtr KopiujForbuild.bat -Recurse $ i = 1 Foreach ($ f w $ file) { Kopiowaniem pozycja $ f.FullName ("E: \ copyforbuild \" + $ f.BaseName + $ i +) $ i ++ "txt".} – Samselvaprabu