Войти

Показать полную графическую версию : [решено] CMD/BAT -удалить из имени фаила пробелы и знаки "!" ","


Ilmira
24-10-2023, 14:53
Помогите написать скрипт для удаления пробелов и знаков"!" "," в названиях файлов. Нашла скрип для удаления пробелов никак не понимаю, как удалить знаки.

@echo off
setlocal

for /f "tokens=*" %%i in (' dir /b ') do call:ren "%%i"
goto:eof

:ren
set "file=%~1"
ren %1 %file: =%

DJ Mogarych
24-10-2023, 15:12
"Батник":

powershell -command "dir 'D:\temp' -Recurse |? psiscontainer -eq $false |% {Rename-Item $_.fullname ($_.name -replace '!|,|\s') -whatif}"

Поменяйте путь на свой, после проверки работоспособности уберите -whatif - сейчас скрипт только выводит сведения.

Ilmira
24-10-2023, 15:23
Батник: не меняет названия они остаются такие же

DJ Mogarych
24-10-2023, 15:24
-whatif убрали?

Ilmira
24-10-2023, 16:23
Да, осталась команда такой:
powershell -command "dir 'C:\Temp\1' -Recurse |? psiscontainer -eq $false |% {Rename-Item $_.fullname ($_.name -replace '!|,|\s')}"

Через командную строку сработало, но не работает через батник

DJ Mogarych
24-10-2023, 17:21
Понятно. Лучше запускать это в родном powershell, а именно - создать файл script.ps1 и запускать его по ПКМ "Выполнить с помощью Powershell"

dir 'C:\Temp\1' -Recurse |? psiscontainer -eq $false |% {Rename-Item $_.fullname ($_.name -replace '!|,|\s')}

megaloman
24-10-2023, 20:37
Ilmira, Чистый CMD@Echo Off
For %%f In (*.*) Do (
Set "Name=%%f"
Call Set "Name=%%Name: =%%"
Call Set "Name=%%Name:!=%%"
Call Set "Name=%%Name:,=%%"
Call Ren "%%f" "%%Name%%"
)
Exit /B

Ilmira
25-10-2023, 09:41
А можно написать исключения, когда файл повторяет название добавлять "_"в конце

DJ Mogarych
25-10-2023, 11:02
Заманаешься так добавлять, потому что может возникнуть ситуация, когда после переименования будет несколько файлов с одинаковыми именами.

ddd — к,опия.txt
ddd — ко,пия.txt
ddd — коп, ия.txt
ddd — копия (5).txt
ddd — копия.txt
ddd.txt


Лучше добавлять что-то уникальное на каждый момент переименования, например, мгновения времени.

Powershell:

$folder = 'C:\Temp\1'

$replace = '!|,|\s'
dir $folder -Recurse |? {$_.psiscontainer -eq $false -and $_.basename -match $replace} |% {
$newName = $_.basename -replace $replace
if (Test-Path "$($_.DirectoryName)\$newName$($_.extension)") {
$newName = $newName + "_" + (get-date).Ticks
}
$newName = $newName + $_.extension
Rename-Item $_.fullname $newName
}



ddd.txt
ddd—копия(5).txt
ddd—копия.txt
ddd—копия_638338282110101632.txt
ddd—копия_638338282110120695.txt
ddd—копия_638338282110156257.txt

Ilmira
25-10-2023, 11:27
А можно будет добавить в бат, чтобы добавлялось время, в конце после "_"
@Echo Off
For %%f In (*.*) Do (
Set "Name=%%f"
Call Set "Name=%%Name: =%%"
Call Set "Name=%%Name:!=%%"
Call Set "Name=%%Name:,=%%"
Call Set "Name=%%Name:$=%%"
Call Set "Name=%%Name:+=%%"
Call Set "Name=%%Name:(=%%"
Call Set "Name=%%Name:)=%%"
Call Ren "%%f" "%%Name%%"
)

Exit /B

megaloman
25-10-2023, 15:21
А можно написать исключения, когда файл повторяет название добавлять "_"в конце »@Echo Off
cls
For %%f In (*.*) Do Call :MyRen "%%f"
pause
Exit /B

:MyRen
Set "Name=%~n1"

Set "Name=%Name: =%"
Set "Name=%Name:!=%"
Set "Name=%Name:,=%"

If /I "%Name%"=="%~n1" Exit /B 0
If Not Exist "%Name%%~x1" (Ren %1 "%Name%%~x1" &Exit /B 0)
Set /A i=0
:Begin
Set /A i+=1
If Exist "%Name%_%i%%~x1" GoTo :Begin
Ren %1 "%Name%_%i%%~x1"
Exit /B 01aqwertyuiop.txt
1aqwertyuiop_1.txt
1aqwertyuiop_2.txt
1bqwertyuiop.txt
1bqwertyuiop_1.txt
1bqwertyuiop_2.txt
1qwertyuiop.txt
1qwertyuiop_1.txt
1qwertyuiop_2.txt
2aqwertyuiop.txt
2aqwertyuiop_1.txt
2aqwertyuiop_2.txt
2bqwertyuiop.txt
2bqwertyuiop_1.txt
2bqwertyuiop_2.txt
2qwertyuiop.txt
2qwertyuiop_1.txt
2qwertyuiop_2.txt
3aqwertyuiop.txt
3aqwertyuiop_1.txt
3aqwertyuiop_2.txt
3bqwertyuiop.txt
3bqwertyuiop_1.txt
3bqwertyuiop_2.txt
3qwertyuiop.txt
3qwertyuiop_1.txt
3qwertyuiop_2.txt
hgfhjkldfghj.ggg
Лучше добавлять что-то уникальное на каждый момент переименования, например, мгновения времени. »ИМХО, при таком подходе получим плохо читаемые имена файлов.

Ilmira
26-10-2023, 10:44
Спасибо большое, очень помогли :up:




© OSzone.net 2001-2012