2016-10-12 4 views
-1

Как создать пакетный файл, который удаляет только определенные символы только из имен файлов? Можно ли это сделать в сценарии? Я хочу удалить эти символы:Пакетное переименование файлов для удаления определенных символов

({[}])+- 
+0

Большинство из того, что вы написали, не имеет никакого отношения к тому, что вы на самом деле хотите; Я предлагаю вам удалить вафли и просто спросить: «Как мне переименовать группу файлов, удалив отдельные символы в наборе» ({[}]) + - '?" * – Clifford

ответ

0

Позвольте представить вам 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(/[({\[}\])+-]/, '')))} 
0

Команда переименования командной оболочки Windows cmd.exe не в состоянии делать то, что вам нужно. Это можно сделать с помощью команды PowerShell Rename-Item с использованием оператора -Replace с регулярным выражением.

Тем не менее, сценарии PowerShell ограничены политиками безопасности, поэтому это not quite as straightforward в виде скрипта cmd. Язык сценариев, такой как Python, может быть менее проблематичным.

+0

Ruby - это более простой путь к Python, конечно, если у вас есть только опыт с пакетом – peter

+0

@peter: Возможно, так; Я только сказал «например»: «Я не знаю ни одного языка особенно хорошо - это был просто пример. Я лично сделал бы это на C++ только потому, что это тот язык, который я знаю лучше всего и ежедневно использую, чтобы он был быстрее. Лучшим языком для быстрых заданий часто является тот, который вы уже знаете, или тот, для которого вы установили инструменты, а не обязательно наилучшим образом подходящим для задачи. – Clifford

+0

Вы так правы. Но это не играет в случае OP, тем легче и понятнее, чем я подумаю. – peter

0

Выход

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!.* 
) 
Смежные вопросы