2017-06-29 21 views
2

コマンドプロンプトの組み込みコマンドを呼び出そうとしていますが、わかりません。実行可能ファイルがパスにありません - GO

func main() { 
    cmd := exec.Command("del", "C:\trial\now.txt") 
// Reboot if needed 
    cmd.Stdout = os.Stdout 
    if err := cmd.Run(); err != nil { 
     log.Fatal(err) 
    } 
} 

そして、私は次のエラーを取得しています:私は間違って

exec: "del": executable file not found in %PATH% 
exit status 1 

何をしているのですか?

+0

'del'コマンドのフルパスを指定します。私はそれがどのようにウィンドウズの下にあるのかは分かりませんが、もしコマンドが 'del'ならばlinuxでは'/usr/bin/del'を実行する可能性が最も高いです。 – Twisted1919

+0

私は窓の上にいる。それはどこですか? – brandonunited

+0

と私はなぜそれをしなければならないのですか?パスにdelしてはいけませんか? – brandonunited

答えて

6

delは実行可能ではありません。組み込みコマンドです。 exec.Commandでは、別の実行可能ファイルにフォークアウトすることができます。 、あなたはまた、上記のように文字列にバックスラッシュをエスケープする必要が

cmd := exec.Command("cmd.exe", "/C", "del C:\\trial\\now.txt") 

注:シェルコマンドを使用するには、あなたが実行したいシェルの実行可能ファイルを呼び出す必要があり、そして組み込みコマンド(およびパラメータ)を渡しますまたはバッククォート引用符で囲まれた文字列を使用する:あなただけのファイルを削除したい場合は

cmd := exec.Command("cmd.exe", "/C", `del C:\trial\now.txt`) 

しかし、あなたがそうすることをシェルに出フォークよりもむしろ直接ファイルを削除するos.Removeを使用してオフにおそらく方がよいでしょう。

+0

引数文字列にはタブと改行が含まれています。 – JimB

+0

良いキャッチ。一定。 – Adrian

2

実行可能ファイルの問題に加えて、パス文字列はあなたの考えではありません。

cmd := exec.Command("del", "C:\trial\now.txt") 

\tは改行としてタブとして解釈され、そして\nされるであろう。

これを避けるには、``には特殊文字を含まず、エスケープを使用せず、\も使用してください。 Windowsユーザーにとって大きな救済策です!

cmd := exec.Command("del", `C:\trial\now.txt`) 

多くのためのString Literals in the Go Language Specを参照してください。