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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Массовое переименование файлов со счётчиком.

Ответить
Настройки темы
VBS/WSH/JS - Массовое переименование файлов со счётчиком.

Пользователь


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

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


Есть большое количество текстовых файлов в папке.
Как лучше и быстрее переименовать такое кол-во файлов средствами .vbs
Можно и .bat, но первое вроде бы быстрее работает.
Чтобы новые имена были от 1 и выше,в формате с одной цифрой.(т.е. не 01,или 001, а 1).

Отправлено: 16:28, 24-10-2020

 

Ветеран


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

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


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

Цитата serg515:
Можно и .bat, но первое вроде бы быстрее работает. »
Да нет, в данном случае особой разницы Вы не увидите.
Скрытый текст
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set /a iCount = 0
for /f "usebackq delims=" %%i in (`dir /b /a:-d "*.txt"`) do (
	set /a iCount += 1
	ren "%%~i" "!iCount!%%~xi"
)

endlocal
exit /b 0

Другое дело, что в именах файлов могут встретиться символы, которые окажутся не по зубам такому пакетному файлу. Посему — да, можно и WSH/PoSH:
Скрытый текст
Код: Выделить весь код
Get-ChildItem -Path '*.txt' | ForEach-Object -Begin {
        $iCount = 0
    } -Process {
        Rename-Item -Path $_.FullName -NewName "$((++$iCount))$($_.Extension)"
    }

И Вы ничего не сказали, что делать, если там уже окажутся файлы с такими «нумерованными» именами.
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:27, 24-10-2020 | #2



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

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


Ветеран


Contributor


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

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


Код: Выделить весь код
@Echo Off
	Set "BoxIn=Z:\Soft_In"
	Set "Mask=*.txt"
	For %%i In ("%BoxIn%\%Mask%") Do (Set "Ext=%%~xi" &Ren "%%i" "%%~nxi.~~tmp~~")

	Set /A N=0
	For %%i In ("%BoxIn%\*%Ext%.~~tmp~~") Do (
		Set /A N+=1 &Call Ren "%%i" "%%N%%%Ext%"
	)
Exit /B
И всё равно, были ли там нумерованные имена или нет, все переименуем заново.

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


Последний раз редактировалось megaloman, 24-10-2020 в 21:22.

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

Отправлено: 17:41, 24-10-2020 | #3


Пользователь


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

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


Цитата Iska:
И Вы ничего не сказали, что делать, если там уже окажутся файлы с такими «нумерованными» именами. »
переименовать всё.

Отправлено: 18:05, 24-10-2020 | #4


Пользователь


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

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


Цитата megaloman:
@Echo Off
Set "BoxIn=Z:\Soft_In"
Set "Mask=*.txt"
For %%i In ("%BoxIn%\%Mask%") Do (Set "Ext=%%~xi" &Ren "%%i" "%%~nxi.~~tmp~~")
Set /A N=0
For %%i In ("%BoxIn%\*%Ext%.~~tmp~~") Do (
Set /A N+=1 &Call Ren "%%i" "%%N%%%Ext%"
)
Exit /B »
работает.по времени похоже на total commander.
может есть аналогичное в vbs ?

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


Старожил


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

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


serg515, можно ещё однострочник PS попробовать:
Код: Выделить весь код
dir *.txt | % {$i=1} {ren $_ -NewName ("{0:D1}.txt" -f $i++)}
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:06, 25-10-2020 | #6


Пользователь


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

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


Цитата Uragan66:
dir *.txt | % {$i=1} {ren $_ -NewName ("{0:D1}.txt" -f $i++)} »
к сожалению если существуют файлы с такими числовыми имена возникает ошибка

Отправлено: 13:52, 25-10-2020 | #7


Ветеран


Contributor


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

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


vbs
Код: Выделить весь код
MyDir = "Z:\Soft_In"
Ext = "txt"

MyMask = "^.*\." + Ext + "$"

Set Reg = CreateObject("VBScript.RegExp")
Reg.IgnoreCase = True
Reg.Pattern = MyMask

With CreateObject("Scripting.FileSystemObject")
    Set Files = .GetFolder(MyDir).Files

    For Each File In Files
        FilePath = File.Path
        If Reg.Test(FilePath) Then
            .MoveFile FilePath, FilePath + ".~~~tmp~~~"
        End If
    Next

    Set Files = .GetFolder(MyDir).Files
    Reg.Pattern = "^.*\.~~~tmp~~~$"

    N = 0
    For Each File In Files
        FilePath = File.Path
        If Reg.Test(FilePath) Then
            N = N + 1
            .MoveFile FilePath, File.ParentFolder + "\" + CStr(N) + "." + Ext
        End If
    Next
End With

MsgBox "Done"
В ~2раза быстрее моего CMD. Переименовываю все файлы с указанным расширением. Если бы была гарантия, что все исходные файлы если и имеют цифровые имена, но более числа файлов, то переименование можно было бы сделать еще в 2 раза быстрее. В противном случае вижу только такое решение, реализованное в моих CMD и VBS: переименовывать дважды.

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


Последний раз редактировалось megaloman, 25-10-2020 в 14:26.

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

Отправлено: 14:11, 25-10-2020 | #8


Ветеран


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

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


Цитата megaloman:
…переименовывать дважды. »
Ну, можно ещё сначала переместить во временный каталог, а затем перемещать по одному в другой временный каталог, там переименовывать в очередное имя, а затем перемещать вобрат в исходное местоположение, и в конце удалять оба уже пустых временных каталога — это гарантирует отсутствие проблем с наложением имён даже без проверки. Но тут надо смотреть — не потеряются ли разрешения безопасности на файлы.

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


Ветеран


Contributor


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

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


Цитата Iska:
оба уже пустых временных каталога »
ИМХО, слишком много временных каталогов, хватает одного.
Код: Выделить весь код
@Echo Off
	Set "BoxIn=Z:\Soft_In"
	Set "Mask=*.txt"

	Set "MyTMP=%BoxIn%\%~nx0.tmp"
	
	2>nul Rd /Q /S "%MyTMP%"
	Md "%MyTMP%"	

	Set /A N=0
	For %%i In ("%BoxIn%\%Mask%") Do (Set /A N+=1 &>nul Call Move "%%i" "%MyTMP%\%%N%%%%~xi")

	>nul Move "%MyTMP%\*.*" "%BoxIn%\"
	Rd /Q /S "%MyTMP%"
Exit /B
Я раньше тоже предполагал такой вариант, решил, что он будкт медленнее, но по времени одно и то же.
Кстати, в vbs пришлось делать именно Move, переименовать файл я не умею.

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


Последний раз редактировалось megaloman, 25-10-2020 в 16:34.

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

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



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Массовое переименование файлов со счётчиком.

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Массовое перемещение файлов из списка files.txt ANIMka Хочу все знать 7 19-12-2018 05:13
CMD/BAT - [решено] Массовое переименование, отнимая слова от текущего имени ArchyA Скриптовые языки администрирования Windows 8 19-07-2018 18:59
CMD/BAT - Переименование файлов Verilog Скриптовые языки администрирования Windows 4 10-12-2014 14:55
CMD/BAT - Переименование файлов. gen0m.rsw Скриптовые языки администрирования Windows 1 15-10-2010 19:15
CMD/BAT - [решено] AD массовое переименование пользователей toperx Скриптовые языки администрирования Windows 9 24-07-2009 12:46




 
Переход