Пакетная команда возвращает странную ошибку

0

Я часами работал над командой, чтобы перебрать подпапки и найти то, что вы искали, но он возвращает это:

Поиск: Текстовый Doc.txt

C: \ Users \ Tyler \ Desktop \ "Text Doc.txt"

Поиск закончен!

Кавычки вокруг «Text Doc.txt» меня раздражали, поэтому я попытался удалить их обычным образом (set path =% path: "=%). Теперь я получаю странную ошибку, для которой не могу найти решение:

\ ATI был неожиданным в это время.

Вот содержимое командного файла:

@echo off

set search=%*

if not [%1] == [] (
    echo(
    echo Searching for: %search%
    echo(
    for /r %cd% %%f in ("%search%") do (
        if exist %%f (
            set path=%%f
            set path=%path:"=%
            echo %path%
            echo(
        )
    )
    echo Search finished!
)

Есть идеи, как это решить?


источник
Я думаю, что вы могли бы найти свое решение здесь: Ошибка запуска сценариев командной оболочки, которые включают скобки и / или здесь
Molx
Спасибо, но почему это работало до того, как я попытался исправить цитаты?
Извините, я, честно говоря, не знаю, я не очень много пользователей, я просто искал похожие вопросы.
Molx

Ответы:

1

Во-первых, не меняйте переменную PATH . Кроме того, избегайте изменения дополнительных переменных среды Windows , их изменение может вызвать проблемы.

%PATH%Переменная окружения содержит список папок. Когда команда вводится в приглашении CMD, операционная система сначала ищет исполняемый файл в текущей папке, если не найден, она сканирует, %PATH%чтобы найти его.

FOR /RПроход по файлам (подпапки Recurse) : в отличие от некоторых других вариантов FORкоманды, вы должны включить подстановочный знак ( *или ?) в 'set', чтобы получить согласованные результаты (с FOR /R [[drive:]path] %%parameter IN (set) DO commandсинтаксическим шаблоном).

Ваш скрипт может быть следующим, если его нужно запустить 895551.bat "Text Doc.txt"(с кавычками в имени файла):

@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%"

Если должен быть запущен без имени файла, окружающего кавычки: 895551.bat Text Doc.txtтогда ваш скрипт может запуститься следующим образом:

@echo off
set "search=%*"
set "myPathToFile="
if not "%1"=="" (

Обязательное чтение:

Выход:

==>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"

==>
JosefZ
источник
Большое спасибо! Я полностью забыл, что моя переменная пути будет смешиваться с реальной. Хотя я только что отредактировал его, чтобы включить в него папку с моими командами.