PDA

Показать полную графическую версию : помогите пожалуйста выявить ошибку в скрипте


krisetta
23-10-2018, 21:14
вот мое задание. создать файл sh и bat, который выполняет следующее:
На вход пакетному файлу приходит абсолютный или относительный путь к папке (как параметр пакетного файлы). Если такой папки нет, то писать "Данной папки нет" и завершить выполнение программы. Если такая папка есть, то вывести структуру каталога (включая подкаталоги).
dir
-dir1
--dir1.1
--dir1.2
-dir2
--dir2.1
вот мой код
@echo off
SetLocal EnableDelayedExpansion
set var1=%1
set n
set m
m=0
n=0
for /f "delims=\" %var1% %%n in (*.*) do (set /a n=!n!+1)
set /a n=n-1
if exist %var1% (
(for /r /f "delims=\" %var1% %%A in (*.*) do (set /a m=!m!+1)
set /a m=m-1
for /r %var1% %%G in (*.*) do (n=m-n | for /l (n, 0, -1) do echo - | for /r %var1% %%A in (*.*) do (echo %%~nA)))
else (echo "Данной папки нет")
pause

пишет, что m и n не являются внешними или внутренними командами и что непредвиденное появление пути

megaloman
23-10-2018, 21:47
@Echo Off
cls
If "%~1"=="" (Echo !!! No Input Folder &Pause &Exit /B 2)
If Not Exist "%~1" (Echo !!! Folder not found "%~1" &Pause &Exit /B 1)
Tree "%~1"
Exit /B 0

krisetta
31-10-2018, 15:45
@Echo Off
cls
If "%~1"=="" (Echo !!! No Input Folder &Pause &Exit /B 2)
If Not Exist "%~1" (Echo !!! Folder not found "%~1" &Pause &Exit /B 1)
Tree "%~1"
Exit /B 0


только мне не надо делать это с помощью tree, а в виде
dir1
-dir1.1
--dir1.1.1
--dir1.1.2
-dir1.2
-dir1.2.1
dir2
где каждый знак - обозначает степень вложенности файла

megaloman
31-10-2018, 18:35
@Echo Off
cls
If "%~1"=="" (Echo !!! No Input Folder &Pause &Exit /B 2)
If Not Exist "%~1" (Echo !!! Folder not found "%~1" &Pause &Exit /B 1)

Set "BoxIn=%~1"
If "%BoxIn:~-1%"=="\" Set "BoxIn=%BoxIn:~0,-1%"

Set "Def="
Set "Marg= "
rem Set "Marg="

Echo %BoxIn%
For /F "usebackq delims=" %%d IN (`2^>nul Dir "%BoxIn%" /B /A:D`) DO Call :Out "%BoxIn%\%%d" %Def%- "%Marg%"
pause
GoTo :Eof

:Out
Echo %~3%2%~nx1
For /F "usebackq delims=" %%d IN (`2^>nul Dir %1 /B /A:D`) DO Call :Out "%~1\%%d" %2- "%~3%Marg%"
GoTo :Eof

alpap
31-10-2018, 18:41
предложу и свой вариант, тут форматирование немного другое, но именно как у ТС записано:

@echo off
set "sdir=C:\papka"& if not "%~1"=="" set "sdir=%~1"
if not exist "%sdir%" echo folder not found "%sdir%"& pause& exit

for /f "delims=" %%a in ('dir /ad/b/s "%sdir%"') do set "d=%%a"& call :# "%%d:%sdir%\=%%"
pause& exit

:#
setlocal enabledelayedexpansion
set "d=%~1"
for %%a in ("%d:\=" "%") do set "s=!s!-"
for /f "delims=" %%a in ("%d%") do echo %s%%%~na
endlocal
exit /b

megaloman
31-10-2018, 19:00
alpap, Мой вариант нагляднее, я напрягался :) чтобы сделать именно так, но, чтобы полностью соблюсти что в ТС записано, достаточно в моём варианте написать вместо
Set "Marg= "
Set "Marg="

alpap
31-10-2018, 19:03
Мой вариант нагляднее »
это да, да и я видел что в Вашем коде легко привести вывод к указанному ТС.

megaloman
31-10-2018, 20:05
alpap, TreeD:\CMD
└───JS_Host
├───Kaz_Copy_Move
├───WindowsScript.5v6b6626
│ ├───Win2k_ru
│ ├───Win9xMe
│ └───_Docs
├───_Work
│ ├───Arhiv
│ ├───Mail
│ │ ├───In
│ │ └───Out
│ ├───Protokol
│ │ └───Arhiv
│ ├───Report
│ │ ├───APK
│ │ │ ├───Obl
│ │ │ └───Resp
│ │ ├───Arhiv
│ │ └───Buh
│ │ ├───Obl
│ │ └───Resp
│ └───Soft
│ ├───Arhiv
│ ├───In
│ └───Out
├───_XLS
├───Анализ_лог_файлов_Аргуса
├───Дискета_от_книги
│ ├───Chapter01
│ ├───Chapter02
│ ├───Chapter03
│ ├───Chapter04
│ ├───Chapter05
│ │ └───ForFind
│ ├───Chapter06
│ ├───Chapter07
│ ├───Chapter08
│ ├───Chapter09
│ ├───Chapter10
│ └───Chapter11
├───Из_интернета
│ ├───Автоматизация работы с использованием Windows Scripting Host.files
│ │ └───ConfRefresh.files
│ ├───Листинг 1.files
│ │ └───ConfRefresh.files
│ ├───Основы WSH
│ └───Сценарии WMI для начинающих.files
└───Отлажено

Ваш вариант-JS_Host
--Kaz_Copy_Move
--WindowsScript
--_Work
--_XLS
--Анализ_лог_файлов_Аргуса
--Дискета_от_книги
--Из_интернета
--Отлажено
---Win2k_ru
---Win9xMe
---_Docs
---Arhiv
---Mail
---Protokol
---Report
---Soft
----In
----Out
----Arhiv
----APK
----Arhiv
----Buh
-----Obl
-----Resp
-----Obl
-----Resp
----Arhiv
----In
----Out
---Chapter01
---Chapter02
---Chapter03
---Chapter04
---Chapter05
---Chapter06
---Chapter07
---Chapter08
---Chapter09
---Chapter10
---Chapter11
----ForFind
---Автоматизация работы с использованием Windows Scripting Host
---Листинг 1
---Основы WSH
---Сценарии WMI для начинающих
----ConfRefresh
----ConfRefresh
Для продолжения нажмите любую клавишу . . .
Вообще-то у Вас много несоответствий, я показал самое простое
Моё творениеD:\CMD
-JS_Host
--Kaz_Copy_Move
--WindowsScript.5v6b6626
---Win2k_ru
---Win9xMe
---_Docs
--_Work
---Arhiv
---Mail
----In
----Out
---Protokol
----Arhiv
---Report
----APK
-----Obl
-----Resp
----Arhiv
----Buh
-----Obl
-----Resp
---Soft
----Arhiv
----In
----Out
--_XLS
--Анализ_лог_файлов_Аргуса
--Дискета_от_книги
---Chapter01
---Chapter02
---Chapter03
---Chapter04
---Chapter05
----ForFind
---Chapter06
---Chapter07
---Chapter08
---Chapter09
---Chapter10
---Chapter11
--Из_интернета
---Автоматизация работы с использованием Windows Scripting Host.files
----ConfRefresh.files
---Листинг 1.files
----ConfRefresh.files
---Основы WSH
---Сценарии WMI для начинающих.files
--Отлажено
Для продолжения нажмите любую клавишу . . .
В свой вариант добавил обработку входного параметра

alpap
01-11-2018, 00:36
Вообще-то у Вас много несоответствий »
все просто, у Вас неформатированный (живой, как есть) вывод, у меня нет, я это знаю и не отрицаю, но никто на этом не акцентировал внимания, хотя правильно бы, конечно, соблюсти правильный вывод и именно Ваш вариант в этом случае должен быть правильным.




© OSzone.net 2001-2012