svn - una - ejecutar cmd como administrador windows 10
Cómo llamar a CMD.EXE desde PowerShell con un espacio en el nombre del directorio del comando especificado (1)
Tengo el siguiente script de PowerShell para verificar mis repositorios SVN:
$SVNAdminDir = ''C:/Program Files (x86)/VisualSVN Server/bin'';
$RepositoryDir = ''C:/My Repositories/App1'';
$_cmd = "`"$SVNAdminDir`/svnadmin`" verify `"$RepositoryDir`"";
Write-Host $_cmd; # Copying this into the command prompt runs without an issue...
cmd.exe /c $_cmd; # It''s when I try to execute the command from PS that I get the error.
Pero cuando intento ejecutarlo, recibo el siguiente mensaje de error:
cmd.exe : ''C:/Program'' is not recognized as an internal or external command,
At line:5 char:12
+ cmd.exe <<<< /c $_cmd;
+ CategoryInfo : NotSpecified: (''C:/Program'' is...ternal command,:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
operable program or batch file.
Como esencialmente estoy configurando $cmd = ''"C:/Program Files (x86)/VisualSVN Server/bin/svnadmin" verify "C:/My Repositories/App1"'';
con las comillas dobles dentro de las comillas simples, esperaba que el espacio en C: / Archivos de programa (x86) / ... se pasara correctamente.
Sospecho que hay algo trivial con la cuerda que me falta ...
cmd.exe
llamar a cmd.exe
siguiente manera:
cmd.exe /c "`"$_cmd`""
Los comandos que envía a cmd.exe
deben estar completamente envueltos en sus propias comillas, no solo en las rutas con espacios que forman parte de esos comandos. Esto tiene que ver con cómo Powershell analiza la cadena y necesita pasar citas literales a cmd.exe
para que a su vez realice su propio análisis del contenido de las comillas dobles correctamente.
Por ejemplo, si ya estaba en una sesión de cmd.exe
y configura una variable como esta:
C:/>set _cmd="C:/Program Files (x86)/VisualSVN Server/bin/svnadmin" verify "C:/My Repositories/App1"
Luego, simplemente expandir esa variable en la línea de comando funcionaría:
C:/>%_cmd%
Sin embargo, si lo pasa a una nueva sesión de cmd.exe
, también necesitaría presupuestos adicionales:
C:/>cmd.exe /c "%_cmd%"