在cmd - ERLANG中更改目录并执行外部命令

时间:2017-05-01 13:43:57

标签: cmd erlang

我正在研究需要在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在评论中解决了这个问题。

1 个答案:

答案 0 :(得分:3)

代码中存在两个问题:

  1. 您无法使用os:cmd("cd ...")更改工作目录,需要致电file:set_cwd/1os:cmd("cd ...")只会更改执行该命令的目录,以后对os:cmd/1的调用不会保留更改。

  2. 你需要转义斜杠,否则当它是一个有效的转义序列时它们被解释为转义序列,否则它们会被忽略。

    1> io:format("~s~n~s~n", ["C:\abc\nop", "C:\\abc\\nop"]).
    C:abc
    op
    C:\abc\nop
    
  3. 所以,改变这个:

    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"),
    

    应该解决你的问题。