WSL - команда пробела пробела bash в пакетном сценарии CMD - PullRequest
1 голос
/ 03 февраля 2020

В test.cmd -

wsl echo "Incoming File - $(printf %%q "$(wslpath -ua "%~dpnx1")")"
wsl ls -la "$(printf %%q "$(wslpath -ua "%~dpnx1")")"
pause

В C:\test у меня есть два файла nospace.txt и has space.txt

Когда я перетаскиваю nospace.txt в test.cmd -

C:\test>wsl echo "Incoming File - $(printf %q "$(wslpath -ua "C:\test\nospace.txt")")"
Incoming File - /mnt/c/test/nospace.txt

C:\test>wsl ls -la "$(printf %q "$(wslpath -ua "C:\test\nospace.txt")")"
-rwxrwxrwx 1 yvon yvon 0 Feb  2 18:09 /mnt/c/test/nospace.txt

C:\test>pause
Press any key to continue . . .

Когда я перетаскиваю has space.txt в test.cmd -

C:\test>wsl echo "Incoming File - $(printf %q "$(wslpath -ua "C:\test\has space.txt")")"
Incoming File - /mnt/c/test/has\ space.txt

C:\test>wsl ls -la "$(printf %q "$(wslpath -ua "C:\test\has space.txt")")"
ls: cannot access '/mnt/c/test/has\ space.txt': No such file or directory

C:\test>pause
Press any key to continue . . .

Кажется, WSL не ценит выход для пробелов. Почему?

Ответы [ 2 ]

1 голос
/ 03 февраля 2020

Не используйте printf. Не избегайте имени файла вообще.

wsl echo "Incoming File - $(wslpath -ua "%~dpnx1")"
wsl ls -la "$(wslpath -ua "%~dpnx1")"

Выход -

C:\test>wsl echo "Incoming File - $(wslpath -ua "C:\test\has space.txt")"
Incoming File - /mnt/c/test/has space.txt

C:\test>wsl ls -la "$(wslpath -ua "C:\test\has space.txt")"
-rwxrwxrwx 1 yvon yvon 0 Feb  2 18:09 '/mnt/c/test/has space.txt'
0 голосов
/ 03 февраля 2020

Конечно, вы можете использовать printf с %q, чтобы увидеть экранированную версию аргумента вашего входного файла:

wsl printf '%%s' "Incoming File - $(printf '%%q' "$(wslpath -ua "%~f1")")"

Однако, если вы не копируете и не вставляете его куда-либо, я ' Я не уверен, зачем вам это нужно, поэтому должно быть достаточно следующего:

wsl printf '%%s' "Incoming File - $(wslpath -ua "%~f1")"

У вашей второй команды не должно быть проблем с пробелами, поэтому нет необходимости использовать printf или %q, должно хватить следующего:

wsl ls -la "$(wslpath -ua "%~f1")"



Если ни одна из этих строк примера не является вашим намерением, вам следует рассмотреть вопрос о пересмотре своего вопроса, чтобы сделать его ясно, что вы хотели спросить.
...