Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

The Windows CMD utility has a number of internal commands, such as mklink. How can they be used from the msys shell ?

From CMD's documentation, the /c switch can be used to execute a command and exit; but this doesn't seem to work.

  • If I do cmd /c mklink the mklink command is not executed and the CMD shell is not exited.

Before pressing Enter:

enter image description here

After:

enter image description here

Process Monitor screenshot:

enter image description here

  • Trying to run the command as a background process: cmd /c mklink & apparently works - the mklink command is executed, but the CMD shell is not terminated. Every time Enter is pressed, CMD will become the active shell.
share|improve this question
    
cmd /c mklink works for me with my C shell, with Cygwin bash and with cmd.exe. But I did have to be running elevated or else I got complaints, "You do not have sufficient privilege to perform this operation." I haven't tried msys because I don't have it installed but I'm skeptical that's the problem. I'm suspicious there's something else going on. A transcript or a screen shot of what you did and what happened might be helpful. – Nicole Hamilton Jan 1 '13 at 18:53
    
@NicoleHamilton, screenshots added. For mklink to work, the shell does indeed need to be run as administrator; but my problem is that I can't run any of the internal commands without the cmd shell either taking over or running in the background. This issue is also present for simpler commands which do not require admin, such as dir. – Mihai Rotaru Jan 1 '13 at 19:53
    
Do you have an alias, procedure definition or script that may be intercepting cmd? – Nicole Hamilton Jan 1 '13 at 20:04
    
@NicoleHamilton, nope; I took @Maxiums' advice and ran Process Monitor, and as can be seen in the screenshot I attached, the issue is that msys converts /c to c:\ . The answer is to escape it, and run the command as cmd //c mklink. – Mihai Rotaru Jan 1 '13 at 21:29
up vote 8 down vote accepted
  1. Search your %PATH% for cmd.cmd or cmd.bat. They may interfere with your cmd

  2. Run Process Monitor and run your cmd /c mklink. Examine ProcMon log for really executed commands.

share|improve this answer
14  
Process Monitor helped track down the issue. It is that msys will convert /c to c:\ ; it needs to be escaped: cmd //c mklink. The way these conversions are done is explained here. – Mihai Rotaru Jan 1 '13 at 21:32
    
@MihaiRotaru this comment should be an answer – laktak Mar 15 at 14:27

win7/cygwin/bash had same problem, solution is to launch cmd twice, and convert slashes to backslashes as needed by cmd (for example): REPO_DIR=${REPO_DIR////\\} # Example, Turn c:/cvs into c:\cvs for cmd
cmd /C "cmd /C mklink /D .Repo $REPO_DIR" # launch cmd /C cmd /C cmd

share|improve this answer

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .