2016-12-11 7 views
0

Я хочу, чтобы командный файл перемещался по папке и экспортировал строку, которая содержит имена файлов/пути файлов в папке. До сих пор я настроил:Команда BATCH для ECHO строка, содержащая кавычки, круглые скобки и переменная в txt-файл

for %%F in (*.mp4) do (
echo Folder=("C:\VIDS") VID=("%%~dpnxF") >> "%%F".text 
) 

скобки и кавычки в той же строке, что и команда echo все должны быть эхом в файл (кроме кавычек в команде "%%F", как будет, очевидно, имя файла для вывода, а не сама строка).

Эта формульная ошибка с VID was not expected at this time.

Однако, это работает:

for %%F in (*.mp4) do (
echo "Folder=("C:\VIDS") VID=("%%~dpnxF")" >> "%%F".text 
) 

Но вмещающие котировки выводятся в файл тоже, что я не хочу.

Я попытался вырваться из кавычек в строке первой формулы, используя каретки (^), тильды (~) и косые черты, как предложено в других сообщениях, но никто не работает.

+1

'эхо Папка = ("C: \ порно-" ^) VID = ("%% ~ dpnxF" ^) >>«%% F ".text' – PetSerAl

+0

Блестящий. Это работает, спасибо. Но что, если мне нужно вывести еще немного текста после бит VID = ("%% ~ dpnxF" ^), например.echo Folder = («C: \ VIDS» ^) VID = («%% ~ dpnxF» ^) еще немного, текст (и больше текста) >> «%% F» .text, так как тогда ошибки с «еще не ожидается в это время " –

+1

Тогда вам нужно избежать всех остальных закрывающих круглых скобок') 'с символом кавычки'^'. – PetSerAl

ответ

0

Следующая, (без лишних скобок), кажется, работает, как ожидалось:

For %%F In (*.mp4) Do Echo=Folder=("C:\VIDS") VID=("%%~dpnxF")>>"%%F".text 

Я бы, однако предлагаю вам изменить: "%%F".text к "%%F.text"

+0

Было бы полезно объяснить * почему * это работает ... – aschipfl

1

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

Пока команда echo не отображается в скобках, блок кода, вы можете выводить буквальные круглые скобки без каких-либо проблем:

rem // This will work: 
echo Folder=("C:\VIDS") VID=("%%~dpnxF") 

Как только появится команда echo в скобках, блок, закрывающими ) непреднамеренно закрывает блок. Для того, чтобы решить, что вам нужно, чтобы избежать какой-либо закрывающей скобки вы хотите вывести косой с кареткой ^:

rem // This will fail: 
(
    echo Folder=("C:\VIDS") VID=("%%~dpnxF") 
) 

rem // But this will work: 
(
    echo Folder=("C:\VIDS"^) VID=("%%~dpnxF"^) 
) 

rem // This will work too 
rem // (the opening parentheses do not need to be escaped, but it does not harm either): 
(
    echo Folder=^("C:\VIDS"^) VID=^("%%~dpnxF"^) 
) 

Чтобы применить это к вашему коду, он должен выглядеть следующим образом:

for %%F in (*.mp4) do (
    echo Folder=("C:\VIDS"^) VID=("%%~dpnxF"^) >> "%%~F.text" 
) 

Обратите внимание также на измененную часть перенаправления >> "%%~F.text", где исправлена ​​цитата.

Чтобы избежать косую ПРОСТРАНСТВО, который будет выводиться на каждой строке, можно удалить ПРОСТРАНСТВО перед оператором перенаправления >>; Вы можете также указать переназначения часть перед echo команды:

for %%F in (*.mp4) do (
    >> "%%~F.text" echo Folder=("C:\VIDS"^) VID=("%%~dpnxF"^) 
)