Здравствуйте, Powershell Noob, я пытаюсь написать скрипт, который будет брать пути из моего буфера обмена и просто дублировать их прямо в родительской папке.
Допустим, мой буфер обмена выглядит так:
"C:\Users\User1\New Folder\Image A.jpg"
"C:\Users\User1\New Folder\Image B.jpg"
"C:\Users\User1\New Folder\Image C.jpg"
Я знаю, что это всего лишь вопрос Copy-Item, но я застрял на правильном добавлении «(1)» к имени файла для каждого имени файла. Я пробовал:
$objectList = Get-Clipboard
Foreach($Object in $ObjectList){
$i
$NewName = Join-Path -Path $Object -ChildPath ((Split-Path $Object -Leaf) + $i)
Copy-Item -Path $Object -Destination $NewName}
Иногда я получаю результат вроде:
"C:\Users\User1\New Folder\Image A.jpg1"
но в основном я просто получаю красные ошибки, я прочитал документы и отследил переполнение стека, и я еще больше запутался.
Может ли кто-нибудь помочь мне понять, как это сделать? Спасибо!
И кстати: было бы неплохо, если бы вы хотя бы заявили, что отправили тот же вопрос на другой форум Можно ли пересылать вопрос между веб-сайтом, не относящимся к Stack Exchange, и веб-сайтом Stack Exchange? .... Powershell - Дублирование файлов в одной папке Пожалуйста!
Вы... задали точно такой же вопрос на Reddit. reddit.com/r/PowerShell/comments/ulxyje/…
@Olaf Несколько месяцев назад это было одним из преимуществ PowerShell. Я постоянно сталкивался с его «объектно-ориентированным» подходом, я даже оценил это в более раннем примере, с которым вы помогли мне на другом форуме Powershell. На этот раз я совершенно забыл об этой функции объекта!! Это болезненное осознание для меня, я благодарю вас за то, что вы обратили на это мое внимание!
Что касается публикации на кросс-сайтах, то, возможно, это было и есть дурным тоном делать это. Забегая вперед, я упомяну в сообщениях, что взял на себя смелость задать этот же вопрос в других местах. Причина, по которой я это делаю, заключается в том, что я новичок в программировании, и я не только заинтересован в решении одной проблемы, но и знакомлюсь с соглашениями/подходами через различные примеры.





Что-то вроде этого должно работать:
$objectList = Get-Clipboard
Foreach ($Object in $ObjectList) {
$File = Get-Item -Path $Object
$NewName = Join-Path -Path $File.Directory -ChildPath ($File.BaseName + '1' + $File.Extension)
Copy-Item -Path $File.FullName -Destination $NewName
}
это сработало отлично, вчера я потратил около 4 часов, пытаясь понять это, но вы кратко выразили то, чего я пытался достичь. Большое спасибо!
Вы должны сделать объекты правильными объектами файловой системы, используя
Get-ItemилиGet-ChildItem. Таким образом, вы можете получить доступ к их отдельным элементам, таким какBaseNameиExtension, чтобы иметь возможность переименовывать толькоBaseName. ;-) И кстати: Вы не определили$i! ;-)