Ответ иззи часто будет работать, но он может дать неправильный результат при многих обстоятельствах.
Поиск FINDSTR может не соответствовать должным образом, если есть разница в регистре. Решается с помощью параметра /I
FINDSTR будет обрабатывать строку поиска как две или более строк поиска, если имя профиля содержит пробел. Лучше использовать параметр /C:"searchString"
.
FINDSTR выполнит поиск по регулярному выражению, если %USERPROFILE%
включает метасимвол, подобный регулярному выражению .
, Эту проблему можно решить путем принудительного литерального поиска с помощью параметра /L
или параметра /C:"searchString"
.
Обратная косая черта может быть немного сложнее с FINDSTR, так как она используется FINDSTR как escape-символ. Безопаснее избежать всех обратных слешей как \\
.
Команда ECHO может не работать, если текущее имя каталога содержит специальный символ, такой как &
. Команда CD
безопасно напечатает текущий каталог, не беспокоясь о специальных символах.
Кроме того, поскольку FINDSTR используется в качестве теста, и нет никакой заинтересованности в просмотре совпадающей строки, вывод должен быть перенаправлен в NUL.
И, наконец, решение можно упростить, заменив оператор IF условными &&
и ||
операторы.
Следующий код должен всегда работать:
cd|findstr /bic:"%userprofile:\=\\%" >nul&&echo You can do stuff here!||echo You don't belong here!
Обновление - пример изменения регистра букв
Вот сеанс Windows 7 cmd.exe, который демонстрирует, как может варьироваться регистр буквы диска, сообщаемый CD
(или %CD%
):
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\>set userprofile
USERPROFILE=C:\Users\Dave
C:\>cd c:\users\Dave
c:\Users\Dave>cd
c:\Users\Dave
c:\Users\Dave>echo CD=%CD%
CD=c:\Users\Dave
c:\Users\Dave>cd..
c:\Users>cd C:\users\Dave
C:\Users\Dave>cd
C:\Users\Dave
C:\Users\Dave>echo CD=%CD%
CD=C:\Users\Dave
C:\Users\Dave>