2017-05-01 127 views
0

我正在研究需要在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:[email protected]: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:[email protected]:5672/" -queue=try -full -max-messages=5 -output-dir=E:\Programs\Erlang\erl8.3\usr')我想在cmd中執行命令從Rab​​bitMQ的服務器轉儲信息。我試圖改變目錄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

嘗試'file:set_cwd(「F:\ ...」)'而不是'os:cmd(「cd F:\ ...」)''。 – Dogbert

+0

我嘗試了'file:set_cwd(「F:\ Documents \ UPI \ dump_rabbitmq \ rabbitmq-dump-queue-v0.3-windows-amd64」)行,但沒有任何事情發生。還有'os:cmd(「cd F:\ ...」)',但還是什麼都沒有。 –

+0

將'os:cmd(「cd ...」)更改爲'file:set_cwd(「...」)'時,'os:cmd(「dir」)'的輸出不會改變嗎? – Dogbert

回答

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 
    

因此,改變這種:

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

應該解決您的問題。

+2

或者,您可以使用正斜槓:'F:/ Documents/UPI/dump_rabbitmq/rabbitmq-dump-queue-v0.3-windows-amd64' – legoscia