2014-09-14 6 views
0

Здесь у меня есть некоторый код, который находит все файлы .m4a и перекликается имя файла минус первые три символа:Пакетные найти файлы

setlocal enabledelayedexpansion 
for %%a in (*.m4a) do (
set oldName=%%a 
set newName=!oldName:~3! 
echo !newName! 
) 

Однако, я хочу сделать это только для файлов, начиная с 1 или 0. Я знаю, что могу использовать

for %%a in (0*.m4a) do (

только для файлов, начинающихся с 0, но как это сделать как для 1, так и для 0? Спасибо за любую помощь.

ответ

0
for %%a in (0*.m4a 1*.m4a) do (

Просто включите его в for установить

Но for над набором файлов является динамическим. Возможно, что новые именованные файлы обрабатываются дважды, если их новое имя соответствует выражению подстановки в цикле for. Чтобы избежать этого (при необходимости), извлеките статический список командой dir и обработайте список файлов.

for /f "delims=" %%a in ('dir /b /a-d 0*.m4a 1*.m4a') do (
    set "oldName=%%a" 
    set "newName=!oldName:~3!" 
    ren "%%a" "!newName!" 
) 
+0

эй, извините, что добавил к вопросу, но вы знаете, как переименовать файл, а затем в newName? Я попробовал ren %% a! NewName! но он не работал – user3764734

+0

@ user3764734, тот же код. В этом случае '%% a' вернет имя файла, поэтому' ren "%% a" "! NewName!" ' –

+0

@ user3764734, Это не сработало для вас? Какую ошибку вы получаете? –

0

Ваш код требует небольшой модификации. Одна вещь, о которой нужно знать, это то, что короткие имена файлов совпадают, а также длинные имена файлов всеми формами команд DIR и FOR.

Решение этой задачи заключается в том, чтобы передать команду через фильтр findstr, если это необходимо.

@echo off 
setlocal enabledelayedexpansion 
for %%a in (0*.m4a 1*.mp4) do (
    set oldName=%%a 
    set newName=!oldName:~3! 
    echo !newName! 
) 
Смежные вопросы