fullstopru |
25-07-2018 21:13 2823490 |
Групповая замена символа в именах файлов
Добрый вечер. Объясните как переименовать несколько файлов, а именно заменить в них "@" на "-", сразу. Я знаю что подобные темы здесь давно были и закрыты, но моя ситуация отягощается тем, что я "чайник" и не представляю что делать со скриптами. Хорошие новости в том, что, в принципе, я сообразительный. Заранее спасибо за помощь.
|
На PowerShell:
Код:
Get-ChildItem -Path 'C:\Temp' -Include '*@*.*' -Recurse | ForEach-Object -Process {
if(-not $_.PSIsContainer) {
Rename-Item -Path $_.FullName -NewName "$($_.BaseName -replace '@', '-')$($_.Extension)" -Force
}
}
|
fullstopru |
25-07-2018 21:55 2823497 |
Вложений: 1
Цитата:
Цитата Iska
Get-ChildItem -Path 'C:\Temp' -Include '*@*.*' -Recurse | ForEach-Object -Process {
if(-not $_.PSIsContainer) {
Rename-Item -Path $_.FullName -NewName "$($_.BaseName -replace '@', '-')$($_.Extension)" -Force
}
} »
|
Файл 153467
|
fullstopru |
25-07-2018 22:04 2823498 |
PS. Пардон, менять надо не "@" а "@ " (после собаки еще и пробел).
|
cmd
Код:
@Echo Off
SetLocal EnableExtensions EnableDelayedExpansion
Set "BoxIn=Z:\Box_In"
Set "S1=@ "
Set "S2=-"
For %%i IN ("%BoxIn%\*%S1%*.*") DO Set "nf=%%~nxi" &ren "%%i" "!nf:%S1%=%S2%!"
|
fullstopru |
25-07-2018 22:41 2823503 |
Вложений: 1
Цитата:
Цитата megaloman
@Echo Off
SetLocal EnableExtensions EnableDelayedExpansion
Set "BoxIn=Z:\Box_In"
Set "S1=@ "
Set "S2=-"
For %%i IN ("%BoxIn%\*%S1%*.*") DO Set "nf=%%~nxi" &ren "%%i" "!nf:%S1%=%S2%!" »
|
Файл 153469
|
Вложений: 1
fullstopru,
ничего не понимаю.
1. Во первых, код надо сохранить в файл с расширением .bat
2. Во вторых надо указать в коде Ваш реальный путь к файлам вместо моего Set "BoxIn=Z:\Box_In"
3. На выполнение запускать bat-файл
|
fullstopru |
25-07-2018 23:33 2823508 |
Вложений: 1
Цитата:
Цитата megaloman
3. На выполнение запускать bat-файл »
|
Файл 153472
|
Вы нажимаете Ctrl-V в два раза больше, нежели следует ;).
Цитата:
Цитата fullstopru
PS. Пардон, менять надо не "@" а "@ " (после собаки еще и пробел). »
|
Так добавьте этот пробел в оба используемых места:
Код:
Get-ChildItem -Path 'C:\Мои проекты\0177' -Include '*@ *.*' -File -Recurse | ForEach-Object -Process {
Write-Host $_.FullName
Rename-Item -Path $_.FullName -NewName "$($_.BaseName -replace '@ ', '-')$($_.Extension)" -Force
}
(теперь мне опять доступен PowerShell V5, и пусть будет -File вместо if(-not $_.PSIsContainer) :).
|
А что за запись "CD d/ z:\", и тем более "CD с/ z:\"??
Вы уж повнимательней делайте то, что вам пишут и что вы видите...
Ну а выход из PowerShell осуществляется не по Ctrl+С (^C, что у вас на снимке (1)), а командой exit.
|
Iska, сложно - проще у Get-ChildItem сразу указать ключ -File , а вместо -Include использовать -Filter - он гораздо быстрее., оператор -replace работает с регулярками, безопаснее использовать метод:
Код:
Get-ChildItem c:\temp -Filter *@ *.* -File -Recurse | Rename-Item -NewName { $_.BaseName.Replace('@ ','-')+$_.Extension } -WhatIf
|
Цитата:
Цитата Busla
Iska, сложно - проще у Get-ChildItem сразу указать ключ -File, »
|
Во время написания первого кода у меня под рукой был только PowerShell V.2.0 :).
|
Iska, там должен -Attributes !Directory работать
|
Цитата:
Цитата Busla
Iska, там должен -Attributes !Directory работать »
|
Не должен, т.к. параметр Attributes добавили в PowerShell v 3.0.
|
Просто надо было не выпендриваться, а сразу, с первой же версии, привыкать к какому-нибудь if([System.IO.File]::Exists($_.FullName)) {…} :).
|
Время: 08:36.
© OSzone.net 2001-