Commandoregelomgevingen zoals de Windows Command Prompt en PowerShell gebruiken spaties om commando’s en argumenten te scheiden, maar bestands- en mapnamen kunnen ook spaties bevatten. Om een bestandspad met een spatie erin te specificeren, moet u eraan “ontsnappen”.
Commandoregel 101: waarom je aan ruimtes moet ontsnappen
Door een personage te ‘ontsnappen’ verandert de betekenis ervan. Als u bijvoorbeeld aan een spatie ontsnapt, behandelt de shell het als een standaardspatie-teken in plaats van als een speciaal teken dat opdrachtregelargumenten van elkaar scheidt.
Stel dat u een tekstbestand heeft waarvan u de inhoud wilt zien. U kunt dat doen met het type commando. Ervan uitgaande dat het tekstbestand zich op C:TestFile.txt
, toont de volgende opdracht in de opdrachtprompt de inhoud:
type C:TestFile.txt
Super goed. Nu, wat als u hetzelfde bestand heeft op C:Test FolderTest File.txt
? Als je het onderstaande commando probeert uit te voeren, zal het niet werken – die spaties in het bestandspad zitten in de weg.
type C:Test FolderTest File.txt
De opdrachtregel denkt dat u probeert te zoeken naar een bestand met de naam C:Test
en zegt “kan het opgegeven pad niet vinden”.
Drie manieren om te ontsnappen aan ruimtes op Windows
Er zijn drie verschillende manieren waarop u kunt ontsnappen aan bestandspaden in Windows:
- Door het pad (of delen ervan) tussen dubbele aanhalingstekens (”) te plaatsen.
- Door een caret-teken (^) voor elke spatie toe te voegen. (Dit werkt alleen in Command Prompt / CMD, en het lijkt niet te werken met elk commando.)
- Door een accentteken grave (`) voor elke spatie toe te voegen. (Dit werkt alleen in PowerShell, maar het werkt altijd.)
We laten u zien hoe u elke methode kunt gebruiken.
Zet het pad tussen aanhalingstekens (“)
De standaardmanier om ervoor te zorgen dat Windows een bestandspad correct behandelt, is door het tussen dubbele aanhalingstekens (“) te plaatsen. Met onze voorbeeldopdracht hierboven zouden we bijvoorbeeld in plaats daarvan het volgende uitvoeren:
type "C:Test FolderTest File.txt"
U kunt delen van het pad zelfs tussen aanhalingstekens plaatsen als u dat wilt. Stel dat u een bestand met de naam File.txt in die map had. U zou het volgende kunnen uitvoeren:
type C:"Test Folder"File.txt
Dat is echter niet nodig – in de meeste gevallen kunt u gewoon aanhalingstekens gebruiken rond het hele pad.
Deze oplossing werkt zowel in de traditionele Command Prompt (CMD) -omgeving als in Windows PowerShell.
Soms: gebruik het caret-teken om aan ruimtes te ontsnappen (^)
In de opdrachtprompt laat het caret-teken (^) je in theorie ontsnappen aan spaties. Voeg het gewoon toe voor elke spatie in de bestandsnaam. (U vindt dit teken in de cijferrij op uw toetsenbord. Druk op Shift + 6 om het caret-teken te typen.)
Dit is het probleem: hoewel dit zou moeten werken, en soms ook, werkt het niet altijd. De afhandeling van dit personage door de opdrachtprompt is vreemd.
Met onze voorbeeldopdracht zou u bijvoorbeeld het volgende uitvoeren en het zou niet werken:
type C:Test^ FolderTest^ File.txt
Aan de andere kant, als we proberen ons bestand rechtstreeks te openen door het pad in de opdrachtprompt te typen, kunnen we zien dat het caret-teken de spaties correct ontsnapt:
C:Test^ FolderTest^ File.txt
Dus wanneer werkt het? Welnu, op basis van ons onderzoek lijkt het te werken met sommige toepassingen en niet met andere. Uw kilometerstand kan variëren, afhankelijk van de opdracht die u gebruikt. De afhandeling van dit personage door de opdrachtprompt is vreemd. Probeer het eens met welk commando u ook gebruikt, als u geïnteresseerd bent – het kan wel of niet werken.
Voor consistentie raden we u aan om dubbele aanhalingstekens te gebruiken in de opdrachtprompt of over te schakelen naar PowerShell en de onderstaande grave-accentmethode te gebruiken.
PowerShell: gebruik het accentteken Grave (`)
PowerShell gebruikt het accent grave (`) als escape-teken. Voeg het gewoon toe voor elke spatie in de bestandsnaam. (U vindt dit teken boven de Tab-toets en onder de Esc-toets op uw toetsenbord.)
type C:Test` FolderTest` File.txt
Elk teken met een ernstig accent vertelt PowerShell om aan het volgende teken te ontsnappen.
Merk op dat dit alleen werkt in de PowerShell-omgeving. U moet het caret-teken gebruiken in de opdrachtprompt.
Als je bekend bent met UNIX-achtige besturingssystemen zoals Linux en macOS, ben je misschien gewend om het backslash () -teken vóór een spatie te gebruiken om eraan te ontsnappen. Windows gebruikt dit voor normale bestandspaden, dus het werkt niet —- de caret (^) en grave accent (`) tekens zijn de Windows-versie van backslash, afhankelijk van welke commandoregel-shell je gebruikt.