2013-06-07 3 views
0

У меня есть простой пакетный файл, разбивающий аудио и видео моих лекций об Unversity. Файлы, полученные с использованием кода из другого плаката:Включить «пробел» в имени файла, используя партию

@echo off 
setlocal enableDelayedExpansion 

set DRIVE=%cd:~0,3% 
set MYDIR=%DRIVE%ToDo\ToConvert\ 

for /F %%x in ('dir /B/D %MYDIR%') do (
    echo %%x 
    ) 
pause 

файлы помечены:

PHY2021 (1).mp4 
PHY2021 (2).mp4 
PHY2021 (3).mp4 
etc 

Выход скрипта:

PHY2021 
PHY2021 
PHY2021 

Проблема кажется очевидным, но не может найти, как внедрить «пространство» и что следует в пакете. Я видел способы заменить «пространство» на «подчеркивание» в моем поиске, но может ли кто-нибудь сказать мне, есть ли работа?

+0

Что это такое, что вы хотите сделать? Вы хотите (показать/обработать) имена файлов, чтобы они все еще содержали пробел, или вы хотите заменить пространство символами подчеркивания? Пакет также может иметь проблемы с закрытыми круглыми скобками. И почему '/ b/d'? '/ b' достаточно - и переопределяет'/d'. '/ ad' будет выбирать только каталоги или'/a-d' пропустить имена каталогов, если это то, что было необходимо ... – Magoo

+0

Я использовал код из другого сообщения, я его исправлю. Вы правы, похоже, что преобразование символов в что-то другое обеспечит лучшее исправление, такое как подчеркивание, поскольку передача результатов в ffmpeg по-прежнему имеет разделитель пространства в названии. – Ari

+0

Пространство (также табуляция, запятая, точка с запятой и равно) является разделителем в классической партии. Всегда есть потенциальные проблемы, связанные с ними, и другие символы (например, ')' '' '' '' '' '' '' '' '' '' '' <'), которые имеют особое значение в пакете. – Magoo

ответ

4

попробовать это (двойные кавычки и без разделителей):

@echo off 
setlocal 

set "DRIVE=%cd:~0,3%" 
set "MYDIR=%DRIVE%ToDo\ToConvert\" 

for /F "delims=" %%x in ('dir /B/D "%MYDIR%"') do (
    echo %%x 
) 
pause 
+0

Спасибо за быстрый ответ. Это отлично поработало. Я посмотрю код «delims», чтобы лучше понять его. – Ari

0

EDIT: Я отредактировал свой ответ, чтобы соответствовать Endoro's, поскольку у меня была ошибка там, и чтобы не путать будущих читателей.

В поле FOR /F имеется разделитель по умолчанию и вкладка. Вы должны переопределить его, как это:

@echo off 
setlocal enableDelayedExpansion 

set DRIVE=%cd:~0,3% 
set MYDIR=%DRIVE%ToDo\ToConvert\ 

for /F "delims=" %%x in ('dir /B/D %MYDIR%') do (
    echo "%%x" 
    ) 
pause 

Обратите внимание на delims= после FOR /F.

Из официальной документации FOR:

delims=xxx  - specifies a delimiter set. This replaces the 
         default delimiter set of space and tab. 
+0

«Код» в вашем ответе ** не ** пакет. – Endoro

+0

Спасибо за объяснение функции «delims», я вижу, в чем проблема. – Ari

+0

@kobigurk - ОК, это пакетный, но 'delims = \ r \ n' бесполезный код. – Endoro

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