wolf0425 Начну с благодарности Вам и не сердитесь я только учусь. Показалось, что я довольно подробно изложил задачу, привел пример файл-списка, указал путь, который мне нужен из данного файл-списка, но... оказалось, что только показалось
.
Вот развернутая постановка задачи.
На панели ТС выделены файл(ы) и/или папка(и). Пути с именами выделенных объектов передаются в батник с помощью файл-списка.
Цитата: D:\DISTRIBUT 1\7-Zip\1_7zSD_test\InstallPath\
D:\DISTRIBUT 1\7-Zip\1_7zSD_test\Realtek AC97 Audio Drivers v5.10.00.5970\
D:\DISTRIBUT 1\7-Zip\1_7zSD_test\InstallPath 07.05.16 11-35.res
D:\DISTRIBUT 1\7-Zip\1_7zSD_test\Archive 07.05.15 15-32.7z
D:\DISTRIBUT 1\7-Zip\1_7zSD_test\0test 07.05.15 13-18.7z
D:\DISTRIBUT 1\7-Zip\1_7zSD_test\archiVE.7z
Файл список в кодировке win1251. Все выделенные объекты могут даходиться только в одной папке (В данном примере это D:\DISTRIBUT 1\7-Zip\1_7zSD_test\) или в корне диска (например, D:\) Записей в файл-списке может быть от 1 до N. Путь к файл-списку передается в батник в переменной ~1.
Задача:
1. Переменная soursepart долна содержать имя_и_путь_папки в которой находятся выделенные объекты (в данном примере это D:\DISTRIBUT 1\7-Zip\1_7zSD_test\) или D:\ , если объекты расположены в корне диска D.
2. Переменная soursename долна содержать:
а) если в списке одна запись и она является папкой, то имя_этой_папки (в данном примере это InstallPath, если эта запись состоит из D:\DISTRIBUT 1\7-Zip\1_7zSD_test\InstallPath\)
б) если в списке одна запись и она является файлом, то имя_этого_файла без расширения (в данном примере это InstallPath 07.05.16 11-35, если эта запись состоит из D:\DISTRIBUT 1\7-Zip\1_7zSD_test\InstallPath 07.05.16 11-35.res)
в) если в списке больше чем одна запись, то имя_папки уровнем выше (в данном примере это 1_7zSD_test). Если объекты расположены в корне диска, то имя фиксированное - Archive
3 Переменная allfile долна содержать общее число файлов (только файлов без папок) в файл-списке. Диапазон от 0 до 4, остальные файлы, если их больше, не интересут.
4 Переменнные var1, var2, var3, var4 долны содержать имя_и_путь_фаила для первых четырех файлов в файл-списке, остальные файлы, если их больше, не интересут.
Сейчас я решаю эту задачу так
Код: @echo off
setlocal enabledelayedexpansion
CHCP 1251>nul
set allfile=0& set flagmany=0& FOR /F "tokens=*" %%i IN (%1) DO (
set "tempi=%%i" & IF NOT "!tempi:~-1!"=="\" (
set /a allfile+=1 & set "var!allfile!=%%i" & set "soursename=%%~ni" & set "soursepart=%%~dpi"
) ELSE (
set /a flagmany+=1 & FOR /D %%a IN ("!tempi:~0,-1!.txt") DO (set "soursename=%%~na" & set "soursepart=%%~dpa")
)
)
set /a flagmany+=allfile & IF !flagmany! GTR 1 (
IF "!soursepart:~-2!"==":\" (set "soursename=Archive") ELSE (FOR /D %%a IN ("!soursepart:~0,-1!.txt") DO (set "soursename=%%~na"))
)
CHCP 866>nul
echo %soursepart%
echo %soursename%
IF %allfile% GTR 4 set allfile=4
call :_normlvars "%var1%" "%var2%" "%var3%" "%var4%"
EXIT