Llamo a powershell desde una aplicación Java (a través del símbolo del sistema de Windows) para leer varios atributos de archivos.¿Cómo acceder a las rutas de archivos en Powershell que contienen caracteres especiales?
p. Ej.
powershell (get-item 'C:\Users\erlpm\Desktop\Temp\s p a c e s.txt').creationTime
Adjunto la ruta del archivo entre comillas simples, porque puede contener espacios. Funcionó bien, hasta que encontré una ruta de archivo que contenía corchetes, que parecen interpretarse como un carácter comodín. Me las arreglé para resolver añadiendo el parámetro -LiteralPath:
powershell (get-item -literalpath 'C:\Users\erlpm\Desktop\Temp\brackets[].txt').creationTime
Hasta ahora, todo bien ... Pero rutas de archivos también pueden contener comillas simples, signos de dólar símbolos de unión, ... y todos estos los caracteres parecen tener una función específica en powershell para la cual el parámetro -literalPath parece no funcionar. Intenté adjuntar la ruta con comillas dobles o escapé con el carácter `, pero eso tampoco solucionó mi problema :-(
Cualquier sugerencia sobre cómo pasar una ruta de archivo a Powershell que puede contener espacios, comillas simples, corchetes, los símbolos de unión, signos de dólar, etc.
cambio:? Alguien de aquí ya me mostró cómo conseguir que funcione dentro de Powershell, pero de alguna manera la respuesta ha sido eliminado
de todos modos, lo hice crea un archivo llamado $ & ' [].txt
. Esto funciona dentro Powershell (necesario para escapar de la &):
PS C:\Users\erlpm> Get-Item -LiteralPath "C:\Users\erlpm\Desktop\Temp\`$ & ' [].txt"
Directory: C:\Users\erlpm\Desktop\Temp
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2012-08-23 14:22 0 $ & ' [].txt
Pero cuando ejecuto el mismo sistema de PowerShell a través del símbolo del sistema de Windows, ...
C:\Users\erlpm>powershell Get-Item -LiteralPath "C:\Users\erlpm\Desktop\Temp\`$ & ' [].txt"
... me sale este error :
Ampersand not allowed. The & operator is reserved for future use; use "&" to pass ampersand as a string.
At line:1 char:55
+ Get-Item -LiteralPath C:\Users\erlpm\Desktop\Temp\`$ & <<<< ' [].txt
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : AmpersandNotAllowed
Utilizando el parámetro -command
y poniendo el comando PowerShell entre {}
da exactamente el mismo mensaje de error ...
C:\Users\erlpm>powershell -command {Get-Item -LiteralPath "C:\Users\erlpm\Desktop\Temp\`$ & ' [].txt"}
Podría dar algunos ejemplos de caminos que no están funcionando, y el error exacto se obtiene? Hasta ahora, solo ha proporcionado rutas de trabajo, por lo que es difícil saber dónde está el problema. – latkin
Actualicé mi pregunta y agregué algunos ejemplos que funcionan y que no funcionan. Como puede ver, puedo hacer que funcione desde el prompt de Powershell, pero no ejecutando powershell desde el símbolo del sistema de Windows. –
He reproducido su problema creando un archivo llamado "$ * '[] .txt". Luego, desde un mensaje de Powershell, escribí el artículo get y powershell completó el nombre de archivo para mí, pero no puedo pegar aquí el nombre completo porque markdown come todos los caracteres especiales. Pruébalo y ve si eso ayuda. –
joXn