我正在研究需要在cmd中执行某些命令的Erlang脚本。我试图以这种方式解决问题,但我一无所获。
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")
Dogbert在评论中解决了这个问题。
答案 0 :(得分:3)
代码中存在两个问题:
您无法使用os:cmd("cd ...")
更改工作目录,需要致电file:set_cwd/1
。 os:cmd("cd ...")
只会更改执行该命令的目录,以后对os:cmd/1
的调用不会保留更改。
你需要转义斜杠,否则当它是一个有效的转义序列时它们被解释为转义序列,否则它们会被忽略。
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"),
应该解决你的问题。