Primeiro, não altere a variável PATH . Além disso, evite alterar Variáveis de ambiente do Windows , alterá-las pode causar problemas.
The
%PATH%
environment variable contains a list of folders. When a command is issued at the CMD prompt, the operating system will first look for an executable file in the current folder, if not found it will scan%PATH%
to find it.
FOR /R
Efetuar loop por arquivos (subpastas Recurse) : Ao contrário de algumas outras variantes do comando FOR
, você deve inclua um caractere curinga ( *
ou ?
) no 'conjunto' para obter resultados consistentes retornados (com% padrão de sintaxeFOR /R [[drive:]path] %%parameter IN (set) DO command
).
Seu script pode ser o seguinte, se for iniciado 895551.bat "Text Doc.txt"
(com nome de arquivo entre aspas):
@echo off
set "search=%~1"
set "myPathToFile="
if not "%~1"=="" (
echo(
echo Searching for: "%search%"
echo(
for /r "%cd%" %%f in ("%search%"*) do (
if exist %%f (
set "myPathToFile=%%~f"
echo "%%~f"
echo(
)
)
echo Search finished!
) else (
echo Nothing to search!
)
echo last found myPathToFile "%myPathToFile%"
Se for necessário iniciar sem aspas ao redor do nome do arquivo: 895551.bat Text Doc.txt
, seu script pode começar da seguinte maneira:
@echo off
set "search=%*"
set "myPathToFile="
if not "%1"=="" (
Leitura obrigatória:
- EnableDelayedExpansion
- Um índice A-Z da linha de comando do Windows CMD
- Sintaxe da linha de comando do shell do Windows CMD
- Referência de linha de comando do Windows
Saída:
==>895551.bat
Nothing to search!
last found myPathToFile ""
==>895551.bat "Text Doc.txt"
Searching for: "Text Doc.txt"
Search finished!
last found myPathToFile ""
==>type nul>files\"Text Doc.txt"
==>895551.bat "Text Doc.txt"
Searching for: "Text Doc.txt"
"d:\bat\files\Text Doc.txt"
Search finished!
last found myPathToFile "d:\bat\files\Text Doc.txt"
==>type nul>"files\folder 1\Text Doc.txt"
==>895551.bat "Text Doc.txt"
Searching for: "Text Doc.txt"
"d:\bat\files\Text Doc.txt"
"d:\bat\files\folder 1\Text Doc.txt"
Search finished!
last found myPathToFile "d:\bat\files\folder 1\Text Doc.txt"
==>