ventana una explorador ejecutar desde como comandos carpeta archivos aqui aparece administrador abrir svn powershell cmd visualsvn-server

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%"