Сбой пакетного сценария: Система не может найти указанный путь

Я написал следующий пакетный сценарий, который запускает другой пакетный сценарий в каталоге или, с добавлением флага, в дереве каталогов, а затем в эквивалентном каталоге или дереве каталогов на другом диске (Z :). Независимо от того, какой вариант я выберу, он выдает ошибку «Система не может найти указанный путь». Он делает то, что должен, если я делаю это только в одном каталоге, даже если он выдает ошибку. Он не работает успешно в дереве каталогов. Я запустил его без @echo off, чтобы попытаться понять, где он не работает, но безуспешно. Каталог, в который он пытается перейти, существует.

@echo off
set origdir=%CD%
if X%~f1==X (
echo Please input a directory.
goto done
)

chdir /d %~f1
for %%X in (myotherscript.bat) do (set FOUND=%%~$PATH:X)
if not defined FOUND (
    echo myotherscript is not in your PATH
    )
if X%2==X/R (
goto recursive
) else ( goto single )

 :recursive     
for /d /r %%G in (.) do call myotherscript
echo Z:%~p1
chdir /d "Z:%~p1"
for /d /r %%G in (.) do call myotherscript
goto ended

:single
call myotherscript
echo Z:%~p1
chdir /d "Z:%~p1"
call myotherscript
goto ended

:ended
chdir /d origdir
goto done

:done
pause

Вот "myotherscript" Да, чистка есть.

@echo off
if exist "D:\path\to\purge.bat" (
    call purge
    for %%f in (*.log.*) do call :renameit "%%f"
    for %%f in (*.drw.*) do call :renameit "%%f"
    for %%f in (*.asm.*) do call :renameit "%%f"
    for %%f in (*.prt.*) do call :renameit "%%f"
    goto done ) else (
    echo Purge does not exist.
    goto done )

:renameit
ren %1 *.1

:done

Любая помощь будет оценена по достоинству. Спасибо


person ZackG    schedule 01.03.2013    source источник
comment
Попробуйте отметить @echo off, и это должно помочь вам выяснить, какая строка приводит к тому, что система не может найти указанный путь.   -  person rojo    schedule 01.03.2013
comment
Как вы думаете, почему ошибка в этом скрипте, а не в вашем myotherscript?   -  person dbenham    schedule 01.03.2013
comment
Что ж, я запустил myotherscript независимо и без проблем. Так что, если нет ничего о взаимодействии между ними, я не понимаю, как это могло быть. Я добавлю это к исходному вопросу.   -  person ZackG    schedule 02.03.2013
comment
А, значит, у вас есть еще один сценарий, purge.bat. Вы проверили, что ошибка возникает не из этого командного файла? Кстати, при его вызове вы не используете полный путь.   -  person Andriy M    schedule 02.03.2013
comment
Я знаю, что это не из purge.bat. Остальные два я написал сам, так что с ними может быть что-то не так. purge.bat является частью коммерческого программного пакета, поэтому я очень сомневаюсь, что это связано с этим. (Я не?)   -  person ZackG    schedule 02.03.2013
comment
Хорошо, проблема, вероятно, не в purge.bat (и, конечно, не в самой команде call purge, потому что она выдала бы другое сообщение, если бы не удалось найти purge.bat). Однако вы уже пробовали использовать метод, предложенный @rojo, чтобы найти причину проблемы?   -  person Andriy M    schedule 02.03.2013
comment
Да, похоже, возникают проблемы после первого выполнения myotherscript, когда он пытается выполнить chdir в параллельный каталог. Хотя он не печатает chdir / d Z: \ path \ change \, как это было в начале скрипта.   -  person ZackG    schedule 02.03.2013
comment
В другом скрипте тоже есть @echo off. Вы также можете прокомментировать это, чтобы более точно определить причину нарушения.   -  person Andriy M    schedule 03.03.2013
comment
Я получаю это сообщение об ошибке, когда мой путь включает элементы навигации относительного пути, например cd .. \ xyz   -  person AnneTheAgile    schedule 26.04.2013
comment
О позор! Моя ошибка возникла из-за моей ошибки ... есть ли значок румянца?   -  person AnneTheAgile    schedule 26.04.2013
comment
Разве это не должно быть chdir /d %origdir%? Совершенно уверен, что % необходимы.   -  person David Wohlferd    schedule 05.04.2018


Ответы (2)


Я не уверен, почему этот (очень старый) вопрос был повторно активирован. Но раз уж это произошло, давайте посмотрим, сможем ли мы закрыть это.

Здесь, кажется, есть две проблемы. Первый:

выводится ошибка «Система не может найти указанный путь».

Это похоже на простую опечатку в этой строке:

chdir /d origdir

Без меток «%» это попытка перейти в каталог с буквальным именем origdir, а не в исходный каталог, из которого был запущен сценарий, который будет:

chdir /d %origdir%

Вторая проблема:

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

Предположительно это связано с такой строкой:

if X%2==X/R

«ЕСЛИ» чувствительно к регистру. Если вы попытаетесь запустить это с помощью /r, он не увидит запрос на рекурсию и всегда будет выполнять single.

person David Wohlferd    schedule 06.04.2018
comment
Я тоже не знаю, почему он был реактивирован, и я не могу подтвердить, что это правильный ответ (потребность в нем давно отпала), но я почти уверен, что это так, поэтому я приму его. - person ZackG; 06.04.2018

Для меня я получил сообщение «Система не может найти указанный путь» из-за отсутствующего exe, который появился позже в сценарии. Кажется, что каналы в DOS не всегда выводят данные в порядке выполнения. Я привык к UNIX, где вывод каждой команды "echo" в сценарии идет по порядку, поэтому я добавил отладочный вывод в файл .bat, чтобы попытаться сказать мне, какие строки были выполнены.

Проблема в том, что ошибка о том, что файл не найден, произошла в журнале вывода (и на экране) раньше, чем указали команды echo. Поэтому я не знаю, шла ли оболочка WinXP cmd на несколько шагов вперед, или она выполняла синтаксический анализ для вызова exe во время запуска вызываемого файла bat или что-то в этом роде.

Оказалось, что на самом деле это был плохой путь к .exe, который я запускал из сценария call'd bat, но операторы отладки эха заставили меня подумать, что я был в какой-то более ранней части сценария. Как только я добавил правильный путь перед exe, все заработало

person dbeasy    schedule 03.07.2013