2013-03-01 1 views
2

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

@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 

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

+2

Попробуйте отметить «@echo off», и это поможет вам понять, какая строка приводит к «Системе не удается найти указанный путь». – rojo

+0

Почему, по вашему мнению, ошибка в этом скрипте, а не ваш «myotherscript»? – dbenham

+0

Ну, я запускал «myotherscript» самостоятельно и не имел проблем. Поэтому, если есть что-то о взаимодействии между ними, я не понимаю, как это может быть. Я добавлю его к исходному вопросу. – ZackG

ответ

0

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

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

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