A Resposta do Iszi frequentemente parece funcionar, mas pode dar resultados errados em muitas circunstâncias.
-
A pesquisa FINDSTR pode não corresponder corretamente se houver uma diferença no caso. Resolvido usando a opção
/I
. -
FINDSTR tratará a cadeia de pesquisa como duas ou mais sequências de pesquisa, se o nome do perfil incluir um espaço. Melhor usar a opção
/C:"searchString"
. -
FINDSTR fará uma pesquisa regex se
%USERPROFILE%
incluir um meta-caractere regex como.
. Isso pode ser resolvido forçando uma pesquisa literal usando a opção/L
ou a opção/C:"searchString"
. -
As barras invertidas podem ser um pouco complicadas com FINDSTR, pois são usadas pelo FINDSTR como um caractere de escape. Mais seguro para escapar de todas as barras invertidas como
\
. -
O comando ECHO pode falhar se o nome do diretório atual contiver um caractere especial como
&
. O comandoCD
imprimirá com segurança o diretório atual sem precisar se preocupar com caracteres especiais.
Além disso, como FINDSTR está sendo usado como teste e não há interesse em ver a linha correspondente, a saída deve ser redirecionada para NUL.
E, finalmente, a solução pode ser simplificada substituindo a instrução IF pelos operadores condicionais &&
e ||
.
O código a seguir deve sempre funcionar:
cd|findstr /bic:"%userprofile:\=\%" >nul&&echo You can do stuff here!||echo You don't belong here!
Atualização - Exemplo de caso de letra de unidade variável
Aqui está uma sessão do cmd.exe do Windows 7 que demonstra como o caso da letra da unidade relatada por CD
(ou %CD%
) pode variar:
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>