2014-12-10 3 views
2

У меня есть несколько файлов mp4 в каталоге, который был назван wget, утилита, используемая для загрузки файлов из Интернета.Batch Для файлового цикла String Замена

Дело в том, что написал имя файла как "1% 20-% 201% 20-% 20Overview% 20% 2802% 3A09% 29.mp4 "(процент кодирования строки" 1 - 1 - Обзор (02:09) "), что является неприятностью - это не так просто. Поэтому я решил использовать командную команду для их преобразования.

В этих файлах содержат только несколько специальных символов (пробел, двоеточие и скобку), я думал, что просто выполнить несколько команд в CMD, и после попытки нескольких команд, предназначенных для изменения% 20 к пространству, Я застрял.

В пакетных файлах, я хотел бы использовать:

@echo off 
setlocal enabledelayedexpansion 
for %%i in (*.mp4) do (
set aaa=%%i 
rename "%%i" "!aaa:%%20= !" 
) 

и я попытался (для тестирования):

SETLOCAL enabledelayedexpansion 
FOR %i in (*.mp4) do (
SET aaa="%i" 
echo "!aaa:%%20= !" 
) 

Я попытался изменить '!' до '%', но это не сработало. Кажется, что он печатает именно то, что я написал (например, несколько строк ! Aaa: %% 20 =!), или значение aaa не изменяется.

Может кто-нибудь мне помочь? Я думал, что просто изменение «%%» на «%» приведет к преобразованию сценария командного файла в команды cmd. Каковы другие различия, если нет?

ответ

0

Ваша проблема SETLOCAL не работает из командной строки, поэтому вы никогда не активируете задержку расширения.

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

Вы можете запустить новую оболочку cmd.exe с включенным запаздыванием, чтобы заставить все работать.

cmd /v:on 
FOR %i in (*.mp4) do (SET "aaa=%i"&echo "!aaa:%%20= !") 

Вы должны знать, что вы не можете изменить %3A к :, потому что : не является допустимым в именах файлов.

Вы можете посмотреть в мой JREN.BAT utility, который использует регулярные выражения поиска и замены для переименования файлов:

Вы могли бы сделать что-то вроде:

jren "%20" " " /fm *.mp4 
jren "%3A" "." /fm *.mp4 

Вы должны были бы предшествовать каждую команду с ВЫЗОВ и удваивайте проценты, если вы используете приведенное выше в пакетном скрипте.

Обратите внимание, что я преобразовал %3A в . вместо :, потому что двоеточие не может использоваться в имени файла.

0
@echo off 
setlocal 

:: Define simple macros to support JavaScript within batch 
set "beginJS=mshta "javascript:close(new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).Write(" 
set "endJS=));"" 

SETLOCAL enabledelayedexpansion 
FOR %%i in (*.mp4) do (

    for /f %%N in (
    '%beginJS% decodeURIComponent("%%i") %endJS%' 
) do set "dec=%%N" 
    echo !dec! 

) 

Что делать, если вы попробуете decodeURIComponent из javascript (с mshta)?

+0

Я ничего не знаю о вызове Javascript в пакетном режиме, и хотя это, безусловно, лучший способ справиться с моей проблемой, я хотел знать, почему мой код не работает. – Namnamseo

+0

@Namnamseo - в этом случае '% 2' принимается за второй аргумент партии. И я думаю, что это не будет с множеством .. – npocmaka

Смежные вопросы