title: Considerations when creating a command line interface
body: <p>There are lots of GUI best practices.  I am looking for best practices when developing a command line program.</p>
  
  <p>For example, if I were creating a backup program what is best?</p>
  
  <p><strong>Consideration 1, invocation:</strong></p>
  
  <p>program.exe backup</p>
  
  <p>program.exe /backup</p>
  
  <p>program.exe -backup</p>
  
  <p>program.exe --backup</p>
  
  <p><strong>Consideration 2, parameters:</strong></p>
  
  <p>program.exe backup "C:\file1.txt" "C:\file1.bak" (implicit source and destination)</p>
  
  <p>program.exe backup -source "C:\file1.txt" -destination "C:\file1.bak" (explicit)</p>
  
  <p>program.exe backup -source "C:\file1.txt" "C:\file2.txt" "C:\file3.txt" -destination "C:\files.bak" (multiple sources)</p>
  
  <p>program.exe backup -source "C:\file1.txt" -source "C:\file2.txt" -source "C:\file3.txt" -destination "C:\files.bak" (multiple sources, alternative syntax)</p>
  
  <p><strong>Consideration 3, chaining:</strong></p>
  
  <p>program.exe backup "C:\file1.txt" "C:\file1.bak" backup "C:\file2.txt" "C:\file2.bak" (should this be allowed?)</p>
  
  <p><strong>Consideration 4, typing economy:</strong></p>
  
  <p>program.exe backup </p>
  
  <p>program.exe bkp</p>
  
  <p>program.exe b (should all these be aliases to the same command?) </p>