Изменить каталог и выполнить внешнюю команду в cmd - ERLANG
Я работаю над скриптом Erlang, который должен выполнить некоторую команду в cmd. Я пытался решить проблему таким образом, но ничего не получил.
start() ->
comparing(0000).
comparing(Num) ->
file:set_cwd("F:\Documents\UPI\dump_rabbitmq\rabbitmq-dump-queue-v0.3-windows-amd64"),
DirOut = os:cmd("dir"),
io:format("DirOut=~p~n", [DirOut]),
os:cmd('rabbitmq-dump-queue -uri="amqp://username:password@localhost:5672/" -queue=try -full -max-messages=5 -output-dir=E:\Programs\Erlang\erl8.3\usr'),
NumMes = Num,
io:format("NumMes=~p~n", [NumMes]),
NameF = "msg-000",
io:format("NameF=~p~n", [NameF]),
FileName = concat(NameF, lists:flatten(io_lib:format("~p", [NumMes]))),
io:format("FileName=~p~n", [FileName]),
File = filelib:is_regular(FileName),
io:format("File=~p~n", [File]),
...
Это только часть кода, где у меня есть проблема. В соответствии file:set_cwd("F:\Documents\UPI\dump_rabbitmq\rabbitmq-dump-queue-v0.3-windows-amd64")
Я хочу изменить каталог. В этих двух строках я проверяю, изменился ли каталог:
DirOut = os:cmd("dir"),
io:format("DirOut=~p~n", [DirOut])
И в очереди os:cmd('rabbitmq-dump-queue -uri="amqp://username:password@localhost:5672/" -queue=try -full -max-messages=5 -output-dir=E:\Programs\Erlang\erl8.3\usr')
Я хочу выполнить команду в cmd для сообщений дампа с сервера RabbitMQ. Я пытался изменить каталог с os:cmd("cd F:\Documents\UPI\dump_rabbitmq\rabbitmq-dump-queue-v0.3-windows-amd64")
, но ничего не происходит. Любое предложение, как решить эту проблему?
РЕДАКТИРОВАТЬ
Проблема решена. Необходимо иметь две косые черты в этой строке: file:set_cwd("F:\\Documents\\UPI\\dump_rabbitmq\\rabbitmq-dump-queue-v0.3-windows-amd64")
Догберт решил проблему в комментариях.
1 ответ
В коде есть две проблемы:
Вы не можете изменить рабочий каталог с помощью
os:cmd("cd ...")
нужно позвонитьfile:set_cwd/1
,os:cmd("cd ...")
только изменит каталог для выполнения этой команды, изменение не будет сохраняться для будущих вызововos:cmd/1
,Вам необходимо экранировать косые черты, в противном случае они интерпретируются как escape-последовательность, если это допустимая escape-последовательность, иначе они игнорируются.
1> io:format("~s~n~s~n", ["C:\abc\nop", "C:\\abc\\nop"]). C:abc op C:\abc\nop
Итак, изменив это:
os:cmd("cd F:\Documents\UPI\dump_rabbitmq\rabbitmq-dump-queue-v0.3-windows-amd64"),
чтобы:
file:set_cwd("F:\\Documents\\UPI\\dump_rabbitmq\\rabbitmq-dump-queue-v0.3-windows-amd64"),
должен исправить вашу проблему.