Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] CMD/BAT -удалить из имени фаила пробелы и знаки "!" ","

Ответить
Настройки темы
CMD/BAT - [решено] CMD/BAT -удалить из имени фаила пробелы и знаки "!" ","

Новый участник


Сообщения: 10
Благодарности: 1

Профиль | Отправить PM | Цитировать


Помогите написать скрипт для удаления пробелов и знаков"!" "," в названиях файлов. Нашла скрип для удаления пробелов никак не понимаю, как удалить знаки.

@echo off
setlocal

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

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

Отправлено: 14:53, 24-10-2023

 

Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6626
Благодарности: 1528

Профиль | Отправить PM | Цитировать


"Батник":
Код: Выделить весь код
powershell -command "dir 'D:\temp' -Recurse |? psiscontainer -eq $false |% {Rename-Item $_.fullname ($_.name -replace '!|,|\s') -whatif}"
Поменяйте путь на свой, после проверки работоспособности уберите -whatif - сейчас скрипт только выводит сведения.

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:12, 24-10-2023 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 10
Благодарности: 1

Профиль | Отправить PM | Цитировать


Батник: не меняет названия они остаются такие же

Отправлено: 15:23, 24-10-2023 | #3


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6626
Благодарности: 1528

Профиль | Отправить PM | Цитировать


-whatif убрали?

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 15:24, 24-10-2023 | #4


Новый участник


Сообщения: 10
Благодарности: 1

Профиль | Отправить PM | Цитировать


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

Через командную строку сработало, но не работает через батник
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:23, 24-10-2023 | #5


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6626
Благодарности: 1528

Профиль | Отправить PM | Цитировать


Понятно. Лучше запускать это в родном powershell, а именно - создать файл script.ps1 и запускать его по ПКМ "Выполнить с помощью Powershell"
Код: Выделить весь код
dir 'C:\Temp\1' -Recurse |? psiscontainer -eq $false |% {Rename-Item $_.fullname ($_.name -replace '!|,|\s')}

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)

Это сообщение посчитали полезным следующие участники:

Отправлено: 17:21, 24-10-2023 | #6


Ветеран


Contributor


Сообщения: 2728
Благодарности: 1697

Профиль | Отправить PM | Цитировать


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

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 20:37, 24-10-2023 | #7


Новый участник


Сообщения: 10
Благодарности: 1

Профиль | Отправить PM | Цитировать


А можно написать исключения, когда файл повторяет название добавлять "_"в конце

Отправлено: 09:41, 25-10-2023 | #8


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6626
Благодарности: 1528

Профиль | Отправить PM | Цитировать


Заманаешься так добавлять, потому что может возникнуть ситуация, когда после переименования будет несколько файлов с одинаковыми именами.
Код: Выделить весь код
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

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 11:02, 25-10-2023 | #9


Новый участник


Сообщения: 10
Благодарности: 1

Профиль | Отправить PM | Цитировать


А можно будет добавить в бат, чтобы добавлялось время, в конце после "_"
Код: Выделить весь код
@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

Отправлено: 11:27, 25-10-2023 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] CMD/BAT -удалить из имени фаила пробелы и знаки "!" ","

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - Стереть из контекстного меню пункты "создать" и "удалить" alpap Microsoft Windows 7 2 16-08-2015 20:17
[решено] Как удалить содержимое папок "Моя Музыка" и "Мои Рисунки" через CMD Ivan_009 Автоматическая установка Windows 2000/XP/2003 10 14-01-2013 20:45
Интерфейс - Убрать "Сортировать по имени" из меню "Пуск" Newser Microsoft Windows 2000/XP 3 26-07-2011 09:18
Интерфейс - [решено] Как удалить папку "Моя музыка","Мои Картинки", "Мое видео"? verdix Microsoft Windows 2000/XP 3 03-10-2009 23:46
Запретить/удалить пункт "Programs" ("Программы") из меню кнопки "Start" ("Пуск") submaster Microsoft Windows NT/2000/2003 5 13-09-2006 12:29




 
Переход