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

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

Ответить
Настройки темы
[решено] Скрипт для обрезки имени файлов

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


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

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


Всем добрый день, понадобился скрипт, не требующий прав администратора, который будет обрезать длину файла (например до 120 символов), и будет добавлять счетчик, чтобы не оказалось файлов-дублей.

Я нашел на просторах интернета такой скрипт:

Код: Выделить весь код
@echo off
set "d=D:\test"
set "lim=120"
for /f "delims=" %%a in ('2^>nul dir /a-d/b/s "%d%"') do call :l "%%a"
pause& exit
 
:l
 set "nf=%~n1"& set/a n+=1
 cmd/v/c "if not exist "!nf:~,%lim%!%n%%~x1" (ren "%~1" "!nf:~,%lim%!%n%%~x1") else (goto l)"
exit /b
Но у него есть минус: он как минимум не работает с файлами в имени которых есть "—".
Может ли кто помочь его исправить или сделать аналогичный?

P.S. До этого я делал через Total Commander, но сейчас нужно одно-кликовое решение, потому что оно нужно для эксплуатации самым простым пользователем.

Отправлено: 17:15, 14-05-2020

 

Ветеран


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

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


Это:
Цитата michsh@vk:
set "d=D:\test" »
решение — ни разу не однокликовое . Однокликовое — это Far Manager .

Отправлено: 23:45, 14-05-2020 | #2



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

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


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


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

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


Iska, если юзерам показать Far Manager, то меня запинают ногами(

Отправлено: 13:44, 15-05-2020 | #3


Аватара для Fors1k

Старожил


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

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


Код: Выделить весь код
param(
    $Path   = 'D:\test',
    $Length = 120
)cls

gci $path -file|?{$_.basename.length -gt $Length}|%{ren $_.fullname $($_.basename.Substring(0,$Length)+$_.extension)}
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:15, 15-05-2020 | #4


Ветеран


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

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


Fors1k_m, как обычно, не хватает проверки на дубликаты.

Отправлено: 15:34, 15-05-2020 | #5


Аватара для Fors1k

Старожил


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

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


Iska, в плане "как обычно"? Это же мой первый тут ответ.= )
А саму проверку сделать не проблема. Только не понятно, 120 символов - это длина с расширением или без? Если счетчик добавить,
то будет длина 120+счетчик(+?расширение)?
В общем решил дождаться реакции автора на первый код, так как все равно, скорее всего, пришлось бы дописывать)
Код: Выделить весь код
param(
    $Path   = 'D:\test',
    $Length = 120
)cls

gci $path -file|?{$i++;$_.basename.length -gt $Length}|%{ren $_.fullname $($_.basename.Substring(0,$Length)+$i+$_.extension)}
Надеюсь то, что требовалось.
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:23, 15-05-2020 | #6


Ветеран


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

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


Fors1k_m, я не конкретно про Вас, я про общую ошибку такого рода — где гарантия, что новое имя не совпадает с именем уже существующего файла.

Отправлено: 17:07, 15-05-2020 | #7


Аватара для Fors1k

Старожил


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

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


Цитата Iska:
Fors1k_m, я не конкретно про Вас, я про общую ошибку такого рода »
Понятно)

Последний раз редактировалось Fors1k, 15-05-2020 в 18:15.


Отправлено: 17:43, 15-05-2020 | #8


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


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

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


Fors1k_m, благодарю Вас за помощь. Расширение файла в длине можно не учитывать, главное его само название. К сожалению, я обнаружил ту же самую проблему с — в имени файла.

Когда документ имеет подобное название, скрипт не отрабатывает.
Новый текстовый документ Новый текстовый документ Новый текстовый документ Новый текстовый документ Новый текстовый документ 12345 — копия (3).txt
причем часть "копия (3)" не причем. Ругается именно на длинное тире, и командный интерпретатор пишет: Не удается найти указанный файл.

Отправлено: 19:22, 15-05-2020 | #9


Аватара для Fors1k

Старожил


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

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


Цитата michsh@vk:
Когда документ имеет подобное название, скрипт не отрабатывает. »
Странно, у меня код работает.
Код: Выделить весь код
param(
    $Path   = 'D:\test',
    $Length = 120
)cls

'До: '+(gci $path -file).BaseName;""
gci $path -file|?{$i++;$_.basename.length -gt $Length}|%{ren $_.fullname $($_.basename.Substring(0,$Length)+$i+$_.extension)}
'После: '+(gci $path -file).BaseName
Результат:
Код: Выделить весь код
До: Новый текстовый документ Новый текстовый документ Новый текстовый документ Новый текстовый документ Новый текстовый документ 12345 — копия (3)

После: Новый текстовый документ Новый текстовый документ Новый текстовый документ Новый текстовый документ Новый текстовый доку1
Имя файла содержало ' — ' , и после обработки имя успешно урезано до желаемой длины.
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:25, 15-05-2020 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - Нужен скрипт для определения имени пользователя nasha Скриптовые языки администрирования Windows 7 25-02-2020 20:12
CMD/BAT - скрипт сравнение файлов и копирования по части имени mallonih Скриптовые языки администрирования Windows 7 23-01-2020 09:21
Любой язык - [решено] Скрипт который раскидывает файлы по папкам, с частью имени этих файлов username-qq Скриптовые языки администрирования Windows 6 06-10-2018 18:30
Лучшая программа для обрезки установочного Widows XP ? THEDOGG Хочу все знать 40 22-02-2013 17:02




 
Переход