La respuesta de DavidPostill es excelente, pero puede confundir un poco a los recién llegados. Trataré de reformular.
%
No es un personaje reservado .
Es un personaje con un significado especial para el shell de comandos (también conocido como cmd.exe
y command.com
)
La diferencia es:
- no puede usar caracteres reservados en absoluto (pero vea a continuación)
- es posible que pueda usar caracteres especiales y de escape, simplemente no escribiéndolos tal cual
En otras palabras, puede crear un archivo o carpeta que contenga %
su nombre. Puede hacerlo directamente usando el explorador de Windows porque %
no tiene un significado especial allí. Tampoco hubo intención de evitar que creara dichos archivos en el símbolo del sistema, pero debido a que %
tiene un significado especial allí, debe usar la sintaxis que se describe a continuación para crear dichos archivos.
Archivos BAT
Si está escribiendo un archivo por lotes (* .bat, * .cmd), que se ejecuta mediante el shell de comandos (también conocido como la aplicación del símbolo del sistema), para usarlo %
literalmente (como crear un archivo con %
el nombre y no sustituirlo). una variable o parámetro) necesita escribir en su %%
lugar.
Por ejemplo,
- comando
echo %windir%
produce salida:c:\windows
- sin embargo, el comando
echo %%windir%%
produce salida:%windir%
- y así sucesivamente: el comando
echo %%%%windir%%%%
produce salida:%%windir%%
Entonces, si guarda la siguiente línea como test.bat
y la ejecuta, creará un directorio llamado %test%
completo con signos de porcentaje:
md %%test%%
Si no hay una variable nombrada test
, este siguiente comando es equivalente al último, también crea un directorio %test%
:
md %test%
... pero por favor nunca lo haga así, ya que su comando no se comportará de la manera deseada una vez que alguien cree una variable con ese nombre
Si tiene la intención de usar el comando for
en un archivo BAT, también debe duplicarlo %
para que tenga un significado especial para el for
comando en lugar del comando en sí mismo:
for %%i in (*.*) do echo %%i
Esto producirá una lista de archivos en el directorio actual (es decir, %%i
tiene un significado especial), y no estoy seguro de cómo hacer que produzca literalmente %%i
sin recurrir a la %p%
solución descrita en la siguiente sección ( %%%%i
no funciona aquí).
%
no es el único personaje con un significado especial en el símbolo del sistema. Otros incluyen ^
, <
, >
, |
, (
, )
, &
, !
, "
. La mayoría de ellos (excluyendo "
) se pueden escapar , es decir, con el prefijo de un carácter de escape ^
para que se inserte un carácter literal, suprimiendo su significado especial. Los que también pierden su función especial dentro de la cadena doublequoted, y "
se escapó con una barra invertida: \"
. Es ^
posible que sea necesario duplicar algunos carets ( ) dentro de una cadena encerrada entre comillas dobles y donde tenga lugar la sustitución de variables retrasadas ( !
significado especial).
Símbolo del sistema
Desafortunadamente, al escribir comandos en la ventana del símbolo del sistema directamente, el %
carácter de duplicación solo produce, %%
es decir, el enfoque anterior no funciona en ese caso.
Parece que hay una solución para explotar una peculiaridad en el procesamiento de comandos: puede obtener literal %
escribiendo ^
después %
. Sin embargo, ese enfoque no es infalible: si su nombre de archivo está entre comillas dobles, ^
se interpreta literalmente (y no se elimina como sin comillas)
- comando
echo %windir%
produce salida:c:\windows
- comando
echo %^windir%
produce salida:%windir%
- comando
echo "%^windir%"
produce salida: "%^windir%"
(con extra ^
- no es lo que queríamos)
Recomiendo otra solución alternativa en su lugar:
- crear una variable como esta:
set "p=%"
- use
%p%
donde sea que necesite un signo de porcentaje literal: echo "%p%windir%p%"
ahora producirá salida:"%windir%"
Se puede usar la misma solución para obtener el for
comando de inicio de sesión de porcentaje literal , sin embargo, tenga en cuenta que, a diferencia de los archivos BAT, cuando se ingresa el for
comando directamente, no se duplican los signos de porcentaje.
Caracteres reservados del sistema de archivos
Normalmente no puede crear un archivo o directorio que contenga los siguientes caracteres reservados en su nombre:, /
?
<
>
\
:
*
|
"
símbolo NULL y caracteres con los códigos 1 a 31; también .
y el espacio no puede ser el último personaje; y siguientes nombres son ilegales: com1
com2
com3
com4
com5
com6
com7
com8
com9
lpt1
lpt2
lpt3
lpt4
lpt5
lpt6
lpt7
lpt8
lpt9
con
nul
prn
.
Sin embargo, algunas de estas restricciones se pueden omitir el prefijo de ruta de archivo con \\?\
la siguiente manera: \\?\c:\test...\nul
. Al menos los archivos con nombres reservados y los que terminan con espacio y punto pueden manipularse de esa manera.
Además, el propio sistema de archivos NTFS admite varios subsistemas de nombres: DOS, Windows y POSIX. Es el subsistema de Windows que tiene todas las restricciones anteriores, mientras que POSIX solo prohíbe /
y el símbolo NULL.
El sistema operativo GNU / Linux (un superconjunto de POSIX) puede crear (y eliminar) nombres de archivo / directorio con los que la mayoría de las funciones normales de la API de Windows (y, por lo tanto, los programas de Windows) no pueden funcionar. En Windows XP, trabajar con ellos fue posible mediante la instalación gratuita de "Servicios para el subsistema Unix" (SFU); en Vista y superior, se requieren herramientas de terceros para eso. No estoy seguro de si el nuevo subsistema ubuntu-on-windows10 puede hacerlo.
<test>
. Simplemente no se puede hacer usando las funciones de administración de archivos de Windows.