dirGet-ChildItem (ls)dir /aGet-ChildItem -Forcecd <dir>Set-Location <dir> (cd)cdGet-Location (pwd)mkdir <dir>New-Item -ItemType Directory <dir>del <file>Remove-Item <file> (rm)rmdir /s /q <dir>Remove-Item -Recurse -Force <dir>copy <src> <dst>Copy-Item <src> <dst> (cp)xcopy <src> <dst> /s /eCopy-Item -Recurse <src> <dst>move <src> <dst>Move-Item <src> <dst> (mv)type <file>Get-Content <file> (cat)type nul > <file>New-Item <file>findstr "text" <file>Select-String "text" <file>dir /s /b *name*Get-ChildItem -Recurse -Filter *name*clsClear-Host (cls)date /t && time /tGet-DatesysteminfoGet-ComputerInfohostname$env:COMPUTERNAMEwhoami$env:USERNAMEsetGet-ChildItem Env:set VAR=value$env:VAR = "value"doskey /historyGet-Historyshutdown /s /t 0Stop-Computershutdown /r /t 0Restart-Computerping <host>Test-Connection <host>ipconfigGet-NetIPAddressipconfig /allGet-NetIPConfigurationipconfig /flushdnsClear-DnsClientCachenslookup <host>Resolve-DnsName <host>netstat -anGet-NetTCPConnectiontracert <host>Test-Connection -Traceroute <host>curl -O <url>Invoke-WebRequest <url> -OutFile <file>tasklistGet-Processtaskkill /im <name> /fStop-Process -Name <name> -Forcetaskkill /pid <pid> /fStop-Process -Id <pid> -Forcestart <program>Start-Process <program>sc queryGet-Servicenet start <svc>Start-Service <svc>net stop <svc>Stop-Service <svc>wmic logicaldisk get size,freespace,captionGet-PSDrive -PSProvider FileSystemdir /s <dir>(Get-ChildItem -Recurse | Measure-Object Length -Sum).Sumformat <drive>: /fs:ntfsFormat-Volume -DriveLetter <drive>Cheatsheet CMD vs PowerShell
En Windows conviven dos shells desde hace años: el viejo Símbolo del sistema, heredero de las convenciones de MS-DOS de principios de los ochenta, y PowerShell, presentado en 2006 para llevar a la plataforma las tuberías orientadas a objetos y un modelo de scripting al estilo .NET. Ambas siguen incluidas en cualquier Windows moderno, y cualquier administrador en activo alterna entre ellas según lo que esté instalado, lo que esté ya scripted y lo que se acabe de pegar desde Stack Overflow. La chuleta de abajo pone 40+ tareas cotidianas lado a lado — archivos, sistema, red, procesos, disco — para que la sintaxis adecuada en la shell que toque esté a un clic. La mayoría de los líos al saltar entre las dos no vienen de olvidar comandos. Vienen de rarezas que parecen inocentes y luego muerden. `set VAR=value` en CMD incluye en silencio cualquier espacio que quede al final del valor, por eso la forma entrecomillada `set "VAR=value"` es la costumbre segura. `for /f` analiza con `tokens=` y `delims=`, y equivocarse en cualquiera salta campos sin avisar. PowerShell, por su parte, solo se detiene en errores terminantes — un `Remove-Item` sobre un fichero inexistente es no terminante por defecto y el script sigue como si nada. Estos son los fragmentos que se acaban consultando al depurar precisamente eso: el comando equivalente en la otra shell, la bandera que entrecomilla bien, la redirección que escribe de verdad, sin releer el `/?` desde la primera línea cada vez.
Trampas habituales en CMD y PowerShell
Hay un puñado de costumbres que merecen sitio cuando se escribe en ambas shells de Windows. En CMD, conviene entrecomillar la asignación entera — `set "PATH=%PATH%;C:\bin"` — porque el espacio en blanco antes del `&` o del salto de línea acaba dentro del valor en caso contrario. La expansión de variables es `%var%` en tiempo de parseo y `!var!` tras `setlocal enabledelayedexpansion` dentro de los bucles, y mezclar ambas es el origen de la mayoría de bugs de cadena vacía en bloques `for`. En PowerShell, `$ErrorActionPreference = 'Stop'` cambia el modelo no terminante por defecto, de modo que un único fallo de `Remove-Item` detiene el script en lugar de quedarse anotado y seguir. Las tuberías en PowerShell trasladan objetos, no texto, así que `Get-Process | Where-Object CPU -gt 100` filtra por la propiedad directamente, sin necesidad de `findstr`. Los separadores de ruta también difieren con matices: CMD admite la barra normal en algunos integrados pero no en todos, mientras que PowerShell los normaliza con `Join-Path`. La `ExecutionPolicy` de PowerShell bloquea por defecto los scripts sin firma en estaciones de trabajo, y la solución rápida más habitual `Set-ExecutionPolicy -Scope Process Bypass` solo afecta a la sesión actual, que es el compromiso más seguro cuando se ejecuta un script descargado puntual. Los comentarios también divergen: CMD usa `REM` o `::`, mientras que PowerShell usa `#` para una línea y `<# ... #>` para bloques — pegar un script de una shell en la otra sin cambiar los marcadores de comentario es un papel cortante familiar. Conocer ambas shells no es tanto cuestión de preferencia como de compatibilidad práctica. Los archivos batch heredados escritos hace décadas siguen viajando dentro de instaladores de proveedores y de pipelines que nadie va a reescribir, mientras que PowerShell es donde vive toda la automatización moderna de Windows, desde la administración de Active Directory hasta el aprovisionamiento de recursos en Azure. La mayoría de administradores en activo mantienen un pie en cada una y alternan según lo pida la situación, no según la ideología. La chuleta agrupa todo en Archivos, Sistema, Red, Procesos y Disco para que el equivalente en cualquiera de las dos shells esté a un clic.
- Más de 40 equivalencias entre CMD y PowerShell
- Diseño de comparación lado a lado
- Filtrar por categoría (Archivos, Sistema, Red, Procesos, Disco)
- Búsqueda de texto completo en tareas y comandos
- Copiar comando CMD o PowerShell de forma independiente
Gratis. Sin registro. Tus datos permanecen en tu navegador. Anuncios mediante Google AdSense (con consentimiento).
Por Marco B. ·