Môi trường dòng lệnh như Windows Command Prompt và PowerShell sử dụng khoảng trắng để phân tách các lệnh và đối số - nhưng tên file và thư mục cũng có thể chứa khoảng trắng. Để chỉ định một đường dẫn file có một khoảng trống bên trong nó, bạn cần phải "escape" nó.
Tại sao phải escape khoảng trống?
“Escape” hay thoát một ký tự thay đổi ý nghĩa của nó. Ví dụ, escape một khoảng trắng sẽ khiến shell coi nó như một ký tự khoảng trắng thay vì một ký tự đặc biệt ngăn cách các đối số dòng lệnh.
Giả sử bạn có một file văn bản muốn xem nội dung. Bạn có thể làm điều đó với lệnh type. Giả sử file văn bản nằm ở C:\Test\File.txt, lệnh sau trong Command Prompt sẽ hiển thị nội dung của nó:
type C:\Test\File.txt
Bây giờ, nếu bạn có cùng một file tại C:\Test Folder\Test File.txt thì sao? Nếu bạn thử chạy lệnh dưới đây, nó sẽ không hoạt động - những khoảng trắng trong đường dẫn file đang cản trở.
type C:\Test Folder\Test File.txt
Dòng lệnh cho rằng bạn đang cố gắng tìm kiếm một file có tên C:\Test và cho biết nó “cannot find the path specified” (không thể tìm thấy đường dẫn đã chỉ định).
3 cách escape khoảng trắng trên Windows
Có 3 cách khác nhau để bạn có thể escape đường dẫn file trên Windows:
- Bằng cách đặt đường dẫn (hoặc các phần của nó) trong dấu ngoặc kép (”).
- Bằng cách thêm một ký tự dấu mũ (^) trước mỗi dấu cách. (Điều này chỉ hoạt động trong Command Prompt/CMD và nó dường như không hoạt động với mọi lệnh).
- Bằng cách thêm một ký tự trọng âm (`) trước mỗi khoảng trắng. (Điều này chỉ hoạt động trong PowerShell, nhưng nó luôn hoạt động).
Bài viết sẽ hướng dẫn bạn cách sử dụng từng phương pháp.
Đặt đường dẫn trong dấu ngoặc kép
Cách tiêu chuẩn để đảm bảo Windows xử lý đường dẫn file đúng cách là đặt nó trong các ký tự dấu ngoặc kép (”). Ví dụ, với lệnh mẫu ở trên, lệnh sẽ được chạy như sau:
type "C:\Test Folder\Test File.txt"
Bạn thực sự có thể đặt các phần của đường dẫn trong dấu ngoặc kép nếu muốn. Ví dụ, giả sử bạn có một file có tên File.txt trong thư mục đó. Bạn có thể chạy như sau:
type C:\"Test Folder"\File.txt
Tuy nhiên, điều đó là không cần thiết. Trong hầu hết các trường hợp, bạn chỉ cần sử dụng dấu ngoặc kép xung quanh toàn bộ đường dẫn.
Giải pháp này hoạt động cả trong môi trường Command Prompt (CMD) truyền thống và trong Windows PowerShell.
Sử dụng ký tự dấu mũ (^) trước dấu cách
Trong Command Prompt, ký tự dấu mũ (^) sẽ cho phép bạn escape các dấu cách về lý thuyết. Chỉ cần thêm nó vào trước mỗi khoảng trắng trong tên file. (Bạn sẽ tìm thấy ký tự này trong hàng số trên bàn phím của mình. Để nhập ký tự dấu mũ, hãy nhấn Shift + 6).
Vấn đề là mặc dù cách này có hiệu quả và nhưng không phải lúc nào nó cũng hoạt động. Cách xử lý của Command Prompt đối với ký tự này thật kỳ lạ.
Ví dụ, với lệnh mẫu, nếu bạn chạy như sau, lệnh sẽ không hoạt động:
type C:\Test^ Folder\Test^ File.txt
Mặt khác, nếu thử mở file của mình trực tiếp bằng cách nhập đường dẫn của nó vào Command Prompt, bạn có thể thấy rằng ký tự dấu mũ sẽ escape khoảng trắng đúng cách:
C:\Test^ Folder\Test^ File.txt
Vậy nó hoạt động khi nào? Dựa trên nghiên cứu, nó dường như chỉ hoạt động với một số ứng dụng. Mọi thứ có thể thay đổi tùy thuộc vào lệnh bạn đang sử dụng. Cách xử lý của Command Prompt đối với ký tự này thật kỳ lạ. Hãy thử với bất kỳ lệnh nào bạn đang sử dụng, nó có thể hoạt động hoặc có thể không hoạt động.
Để nhất quán, bài viết khuyên bạn nên sử dụng dấu ngoặc kép trong Command Prompt hoặc chuyển sang PowerShell và sử dụng phương pháp bên dưới.
Sử dụng ký tự dấu trọng âm (`)
PowerShell sử dụng ký tự trọng âm (`) làm ký tự escape. Chỉ cần thêm nó vào trước mỗi khoảng trắng trong tên file. (Bạn sẽ tìm thấy ký tự này phía trên phím Tab và bên dưới phím Esc trên bàn phím của mình).
type C:\Test` Folder\Test` File.txt
Mỗi ký tự trọng âm yêu cầu PowerShell escape ký tự sau đó.
Lưu ý rằng điều này chỉ hoạt động trong môi trường PowerShell. Bạn sẽ phải sử dụng ký tự dấu mũ trong Command Prompt.
Nếu đã quen với các hệ điều hành giống UNIX như Linux và macOS, bạn có thể quen với việc sử dụng ký tự dấu gạch chéo ngược (\) trước một khoảng trắng để escape nó. Windows sử dụng ký tự này cho các đường dẫn file thông thường, vì vậy nó không hoạt động. Các ký tự dấu mũ (^) và dấu trọng âm (`) là phiên bản Windows của dấu gạch chéo ngược, tùy thuộc vào shell dòng lệnh bạn đang sử dụng.
Xem thêm: