Как создать пакетный файл, который удаляет только определенные символы только из имен файлов? Можно ли это сделать в сценарии? Я хочу удалить эти символы:Пакетное переименование файлов для удаления определенных символов
({[}])+-
Как создать пакетный файл, который удаляет только определенные символы только из имен файлов? Можно ли это сделать в сценарии? Я хочу удалить эти символы:Пакетное переименование файлов для удаления определенных символов
({[}])+-
Позвольте представить вам Ruby, язык сценариев, гораздо более мощный и простой в освоении, чем альтернативный вариант Powershell M $. Интерпретатор окон вы можете найти на http://rubyinstaller.org/ Я мог бы дать вам код в одной строке, но для ясности здесь есть 4-строчная программа, которая делает то, что вам нужно.
Dir['c:/temp/*.package'].each do |file|
new_name = File.basename(file.gsub(/[({\[}\])+-]/, ''))
File.rename(file, new_name)
end
Позвольте мне объяснить, команда Dir перечисляет путь с групповыми символами внутри, в UNIX нотации с косой черты вместо обратной косой черты, так и для каждого файла он генерирует NEW_NAME, беря базовое имя (имя файла только) пути и использования регулярное выражение для замены (gsub) символов внутри/[]/вторым параметром, '' (пустая строка). Регулярные выражения - это способ пойти на такие вещи, много информации в google, если вы хотите больше узнать об этом. Наконец, я использую файл утилиты File (yes Ruby полностью Object Oriented), чтобы переименовать файл в новое имя.
Вы можете сделать это на любом языке, но я ставлю не столь кратким и удобочитаемым, как в Ruby. Установите интерпретатор Ruby, сохраните эти строки, например, cleanup.rb, измените путь к вашему и запустите его с помощью ruby cleanup
или просто cleanup
, если ваше расширение правильно связано.
переименовывает
c:\temp\na({[}])+-me.package
в
c:\temp\name.package
И в качестве бонуса: здесь версии одна линия, которая делает то же самое в текущей папке.
Dir['*'].each {|f| File.rename(f, File.basename(f.gsub(/[({\[}\])+-]/, '')))}
Команда переименования командной оболочки Windows cmd.exe не в состоянии делать то, что вам нужно. Это можно сделать с помощью команды PowerShell Rename-Item с использованием оператора -Replace
с регулярным выражением.
Тем не менее, сценарии PowerShell ограничены политиками безопасности, поэтому это not quite as straightforward в виде скрипта cmd. Язык сценариев, такой как Python, может быть менее проблематичным.
Ruby - это более простой путь к Python, конечно, если у вас есть только опыт с пакетом – peter
@peter: Возможно, так; Я только сказал «например»: «Я не знаю ни одного языка особенно хорошо - это был просто пример. Я лично сделал бы это на C++ только потому, что это тот язык, который я знаю лучше всего и ежедневно использую, чтобы он был быстрее. Лучшим языком для быстрых заданий часто является тот, который вы уже знаете, или тот, для которого вы установили инструменты, а не обязательно наилучшим образом подходящим для задачи. – Clifford
Вы так правы. Но это не играет в случае OP, тем легче и понятнее, чем я подумаю. – peter
Выход
C:\Users\User>(
Set FName=test()[]{}+-
Set FName=!Fname:(=!
Set FName=!Fname:)=!
Set FName=!Fname:{=!
Set FName=!Fname:}=!
Set FName=!Fname:[=!
Set FName=!Fname:]=!
Set FName=!Fname:+=!
Set FName=!Fname:-=!
Echo Ren test()[]{}+-.asc !Fname!.*
)
Ren test()[]{}+-.asc test.*
пакетник
SetLocal EnableDelayedExpansion
for %%A in (*.asc) Do (
Set FName=%%~nA
Set FName=!Fname:^(=!
Set FName=!Fname:^)=!
Set FName=!Fname:{=!
Set FName=!Fname:}=!
Set FName=!Fname:[=!
Set FName=!Fname:]=!
Set FName=!Fname:+=!
Set FName=!Fname:-=!
Echo Ren %%A !Fname!.*
)
Большинство из того, что вы написали, не имеет никакого отношения к тому, что вы на самом деле хотите; Я предлагаю вам удалить вафли и просто спросить: «Как мне переименовать группу файлов, удалив отдельные символы в наборе» ({[}]) + - '?" * – Clifford