Обзор
Привет StackOverflow!
Я надеюсь, что кто-то здесь может мне помочь.
Я добавил следующий код для добавления текст в конец имени файла на сетевом диске. Рассматриваемые файлы - это, в основном, файлы «.zip», и обычно они содержат от 6 до 8 подкаталогов в родительской папке с 8–10 файлами «.zip» на подкаталог.
Что я надеюсь Достигнуть - рекурсивно добавлять текст в конец каждого имени файла.
Код:
#Current Directory of creatives
$fileLocation = read-host "Type/Paste location of creatives"
if (Test-Path \\serverPath\name\* -PathType Leaf) {
$serverPathName = "\\serverPath\name\"
$driveLetter = "D:\"
$fileLocation = ($fileLocation -replace [regex]::Escape($serverPathName),$driveLetter)
}
$fileLocation = Resolve-Path $fileLocation
Write-Output $fileLocation
$newText = read-host "Please enter text to append"
$newText = $newText -replace '\s','-'
$addMarket = read-host "Are folders split by market? [Y/N]"
$ZipFiles = Get-ChildItem -Path "$currentDirectory" -Recurse -Filter "*.zip"
if ($addMarket -eq "N") {
foreach ($Zipfile in $ZipFiles) {
Get-ChildItem | %{$_|rename-item -NewName ((($_.BaseName -replace '\s','-') + "-" + $newText + $_.Extension))}
}
}
elseif($addMarket -eq "Y") {
foreach ($Zipfile in $ZipFiles) {
Get-ChildItem -File -Recurse | Rename-Item -NewName {(($_.BaseName -replace '\s','-') + "-" + (($_.Directory.Name -replace '\s','-')) + "-" + $newText + $_.Extension).ToLower()}
}
}
else {
write-host "ERROR! Incorrect Input!"
Write-Host "Exiting Script..."
Exit
}
#Clear Console
clear
#Read-Host -Prompt “Press Enter to exit”
Текущая ситуация:
Когда я запускаю вышеупомянутое (без функции l oop), оно работает нормально, но я должен войти в каждый подкаталог и запустить скрипт прямо там - что, очевидно, отнимает много времени и однообразно.
Когда я запускаю его в l oop, он работает, но работает долго, пока не будет достигнуто общее количество файлов .zip. например, 8 вложенных папок, 9 ".zip" = циклы 72 раза - каждый раз добавляя один и тот же текст.
Ожидаемая ситуация:
I wi sh to запустите сценарий из родительской папки вложенных папок, и сценарий добавит текст только один раз для каждого вложенного каталога во все «.zip», а затем закроет сценарий.
Проблема (?)
Я полагаю, что проблема заключается в следующей переменной:
$ ZipFiles
Но я не могу выяснить, как исправить это. Я установил его, чтобы найти все ".zip" файлы в родительской папке. Я также настроил его на подсчет количества файлов на один подкаталог:
Get-ChildItem -Directory | ForEach-Object { Write-Host $_.FullName $(Get-ChildItem $_ | Measure-Object).Count}
Но ни один из них не сработал для меня.
Резюме:
Я надеюсь, что кто-то может указать мне на ошибку, которую я делаю, и где должно быть исправление. Я открыт для всех предложений. Если есть лучший подход, пожалуйста, дайте мне знать. Я не против изменить то, как работает код, если он означает тот же конечный результат.
Спасибо за чтение!
Раджив Ахмед