2014-02-17 3 views
2

Итак, скрипт работает хорошо, я обычно запускаю его в папке с файлами, которые я изменяю (главным образом .mp3), чтобы обрезать первые X символов из имени файла (число пробелов пробелов ect) из нескольких файлы..bat переименование файлов выполняется несколько раз

@echo off 
setLocal enableDelayedExpansion 
set X=5 
set FOLDER_PATH=. 
pushd %FOLDER_PATH% 
for %%f in (*) do if %%f neq %~nx0 (
    set "filename=%%~nf" 
    set "filename=!filename:~%X%!" 
    ren "%%f" "!filename!%%~xf" 
) 
popd 

Но запустить его на моей карточке SD (отформатированные для Galaxy S4 ш./Android 4.3), что я затыкал в нем прекрасно работает на 70% файлов. Но для некоторых он работает дважды, и для очень редких немногих он действует так, как будто он не запускался вообще. Я полностью одурачен этим, это просто SD-карта?

+0

Извините за теги android, было рекомендовано и оглядывалось назад, это было неуместно. Мой плохой – user3268199

ответ

2

Простая команда FOR с подстановочными знаками начинает итерацию файлов до того, как закончит чтение всего каталога. Он буферизует блок файлов и повторяет их, затем берет туда, где он остановился. При переименовании файла переименованный файл может сортироваться позже в списке и быть выбранным в более позднем блоке файлов. Отсюда двойное переименование.

Каждый раз, когда у вас есть цикл, который изменяет список каталогов, вы должны использовать FOR/F с помощью команды DIR/B вместо простого FOR.

for /f "eol=: delims=" %%F in ('dir /b /a-d-h-s') do ... 

EOL=: только в случае, если имя файла начинается с ; (маловероятно, но возможно). Другие допустимые параметры с тем же результатом: EOL=* или EOL=? - Все символы, которые не могут начинать имя файла или путь.

+0

Спасибо, ваш ответ оценен. Это тоже поможет в других областях! – user3268199

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