Войти

Показать полную графическую версию : Слить файлы в один


p1ka4y777
30-10-2013, 23:26
недавно начал изучать командную строку, подошел к пакетной обработки данных и затупил на этом задании: нужно слить файлы в один, и в качестве параметров принимать имена файлов и слить все эти файлы в файл имя которого задано последним. Если такой файл уже существует - запросить у пользователя разрешение на перезапись. Если хоть один из файлов несуществует - завершить работу с ошибкой и выводом помощи.

вот что получилось сделать читая разные ссылки( но, если честно, немного не понимаю)
@echo off

set tmp=
set param=
set last=

:get
if "%1"=="" goto end
set last=%1
shift
goto get
:end

if not exist %last% goto loop
choice /c:yn /m "File %last% already exists. Overwrite"
if errorlevel 2 pause

:loop
if "%1"=="" goto end1
type %1>%tmp%
set param=%param%%tmp%
shift
if exist %1 goto loop
:end1

echo %param%>%last%
echo OK...


вот ошибка:

106050

Iska
31-10-2013, 00:26
в файл имя которого задано последним. »
Крайне неудачный, на мой взгляд, выбор. Три четверти пакетного файла будут посвящены определению этого последнего аргумента и отсечению его от остальных.

@echo off
setlocal enableextensions enabledelayedexpansion

set sPrev=%~1
set sLast=%~2
if not defined sLast echo Usage: %~nx0 ^<Source file1^> ^<Source file2^> ... ^<Destination file^>& exit /b 1

if not exist "%sPrev%" echo Can't find source file [%sPrev%].& exit /b 2
set sArgs="%sPrev%"

:Repeat
shift
set sPrev=%~1
set sLast=%~2
if defined sLast (
if not exist "%sPrev%" echo Can't find source file [%sPrev%].& exit /b 2
set sArgs=%sArgs%+"%sPrev%"
goto :Repeat
)
set sLast=%sPrev%

copy /b %sArgs% "%sLast%"

endlocal
exit /b 0

p1ka4y777
31-10-2013, 01:00
спасибо за отзыв...
хотелось бы уточнить пару моментов, таких как:

setlocal enableextensions enabledelayedexpansion
%~1
%~nx0
/b 2

объясните, если не сложно, буду очень благодарен

Iska
31-10-2013, 03:07
setlocal /?
call /?
exit /?
На конкретные вопросы будут даваться ответы.




© OSzone.net 2001-2012