- Вопрос или проблема
- Дальнейшее решение с графическим интерфейсом пользователя
- Ответ или решение
- Как обрезать названия нескольких файлов с использованием пакетного файла на Windows 10
- 1. Использование пакетного файла
- Объяснение кода:
- 2. Использование PowerShell
- Объяснение команды PowerShell:
- 3. Сторонние программы
- Заключение
Вопрос или проблема
Мне нужно ежедневно обрезать все имена файлов в папке, и поэтому я ищу рекомендации по пакетным файлам. Любая помощь будет очень полезна!!
Цифры за именами файлов ежедневно меняются…
Windows 10, все расширения файлов – csv.
Вот несколько примеров:
как есть сейчас --> как должно выглядеть
---------------------------------------------------
ECOM_IN_ITEMATTRIBUTE_BRAND_20221020_133719 --> ECOM_IN_ITEMATTRIBUTE_BRAND
ECOM_IN_LINESORDERMIA_20221021_075153 --> ECOM_IN_LINESORDERMIA
ECOM_IN_MASTERFILE_20221020_130710 --> ECOM_IN_MASTERFILE
Вы можете использовать небольшой скрипт PowerShell в сочетании с регулярными выражениями (RegEx). Без или с другим расширением файла вам придется адаптировать заднюю часть под ваши нужды.
ls | Rename-Item -NewName {$_ -replace '(_\d+_\d+)\.txt', '.txt' }
Используйте параметр -WhatIf
в Rename-Item
, чтобы проверить переименования и избежать ошибки.
ls | Rename-Item -NewName {$_ -replace '(_\d+_\d+)\.txt', '.txt' } -WhatIf
Дальнейшее решение с графическим интерфейсом пользователя
Bulk Rename Utility позволяет легко переименовывать файлы и целые папки на основе крайне гибких критериев.
Ant Renamer – это другая бесплатная программа, которая упрощает переименование множества файлов и папок, используя заданные настройки. Она поддерживает имена в формате Unicode.
- Для batch вы можете попробовать:
@echo off && cd /d "%~dp0"
for /f usebackq^tokens^=1*^delims^=2 %%i in =;(`2^>nul ^<con: dir /b /a:a "*_*_*.csv"
`);= do set "_n=%%~ni%%~xj" && "%ComSpec%" /v /r "ren ".\%%~i2*%%~j" "!_n:_.=.!""
Примечание: Если пакетный файл не в той же папке, что и файлы для переименования, замените:
cd /d "%~dp0"
:: на полный путь ::
cd /d "D:\полный\путь\папки\где\находятся\файлы"
Я предпочитаю использовать Bulk Rename Command Line
“D:\Program Files\Bulk Rename Utility\BRC64.exe” /removelastn:16
Обработка папки G:\HB\
Имя файла ECOM_IN_ITEMATTRIBUTE_BRAND_20221020_133719.txt будет переименовано в ECOM_IN_ITEMATTRIBUTE_BRAND.txt
Имя файла ECOM_IN_LINESORDERMIA_20221021_075153.txt будет переименовано в ECOM_IN_LINESORDERMIA.txt
Имя файла ECOM_IN_MASTERFILE_20221020_130710.txt будет переименовано в ECOM_IN_MASTERFILE.txt
“D:\Program Files\Bulk Rename Utility\BRC64.exe” /removelastn:16 /execute
Обработка папки G:\HB\
Имя файла ECOM_IN_ITEMATTRIBUTE_BRAND_20221020_133719.txt переименовано в ECOM_IN_ITEMATTRIBUTE_BRAND.txt
Имя файла ECOM_IN_LINESORDERMIA_20221021_075153.txt переименовано в ECOM_IN_LINESORDERMIA.txt
Имя файла ECOM_IN_MASTERFILE_20221020_130710.txt переименовано в ECOM_IN_MASTERFILE.txt
Ответ или решение
Как обрезать названия нескольких файлов с использованием пакетного файла на Windows 10
Вам необходимо ежедневно обрезать названия файлов в папке, и этот процесс можно автоматизировать с помощью пакетного файла (batch file) на Windows 10. Ниже представлена пошаговая инструкция, как это сделать, а также другие методы, включая использование PowerShell и сторонних программ.
1. Использование пакетного файла
Пакетный файл может быть создан для автоматизации процесса переименования файлов с помощью цикла, который обрабатывает все файлы с расширением .csv
в указанной папке. Ваш текущий формат файлов выглядит следующим образом:
ECOM_IN_ITEMATTRIBUTE_BRAND_20221020_133719.csv -> ECOM_IN_ITEMATTRIBUTE_BRAND.csv
Вот код для пакетного файла, который поможет вам обрезать ненужные части названия файлов:
@echo off
cd /d "D:\путь\к\вашей\папке" rem Замените на полный путь к вашей папке
for %%f in (*.csv) do (
set "filename=%%~nf"
setlocal enabledelayedexpansion
set "newname=!filename:~0,-6!"
ren "%%f" "!newname!.csv"
endlocal
)
Объяснение кода:
@echo off
— отключает отображение команд в окне консоли, что делает вывод более чистым.cd /d "D:\путь\к\вашей\папке"
— перемещает вас в нужную директорию, замените на путь к вашей папке с файлами.for %%f in (*.csv) do (...)
— цикл, который проходит по всем файлам с расширением.csv
в данной папке.set "filename=%%~nf"
— сохраняет имя файла без расширения в переменнойfilename
.setlocal enabledelayedexpansion
— позволяет использовать обновленные значения переменных внутри цикла.set "newname=!filename:~0,-6!"
— создает новое имя файла, обрезая последние 6 символов (включая "_" и 8 цифр даты + 2 цифры времени).ren "%%f" "!newname!.csv"
— переименовывает файл с новым именем.
2. Использование PowerShell
Если вы предпочитаете PowerShell, вот как вы можете переименовать файлы с помощью регулярных выражений:
Get-ChildItem "D:\путь\к\вашей\папке\*.csv" | Rename-Item -NewName { $_.Name -replace '(_\d{8}_\d{6})\.csv$', '.csv' }
Объяснение команды PowerShell:
Get-ChildItem "D:\путь\к\вашей\папке\*.csv"
— находит все файлы с расширением.csv
в указанной папке.Rename-Item -NewName { $_.Name -replace '(_\d{8}_\d{6})\.csv$', '.csv' }
— переименовывает файл, удаляя часть названия с датой и временем.
3. Сторонние программы
Если вам не нравится использовать командные строки или PowerShell, вы можете воспользоваться программами с графическим интерфейсом:
- Bulk Rename Utility: Мощная утилита для пакетного переименования файлов с поддержкой множества настроек. Она простая в использовании и может помочь вам настроить правила переименования.
- Ant Renamer: Это бесплатная программа, которая также предлагает удобный интерфейс для массового переименования файлов.
Заключение
Автоматизация процесса обрезания имен файлов может существенно ускорить вашу работу. В зависимости от ваших предпочтений, вы можете использовать пакетные файлы, PowerShell или сторонние программы. Важно протестировать выбранный метод на небольшом наборе данных, чтобы избежать неожиданных результатов. Оптимизированный для переименования файлов процесс обеспечит вам эффективность и сэкономит время.
Если у вас остались вопросы или нужны дополнительные разъяснения, не стесняйтесь обращаться за помощью.