Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Слить файлы в один (http://forum.oszone.net/showthread.php?t=271019)

p1ka4y777 30-10-2013 23:26 2244244

Слить файлы в один
 
Вложений: 1
недавно начал изучать командную строку, подошел к пакетной обработки данных и затупил на этом задании: нужно слить файлы в один, и в качестве параметров принимать имена файлов и слить все эти файлы в файл имя которого задано последним. Если такой файл уже существует - запросить у пользователя разрешение на перезапись. Если хоть один из файлов несуществует - завершить работу с ошибкой и выводом помощи.

вот что получилось сделать читая разные ссылки( но, если честно, немного не понимаю)
читать дальше »
@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 2244292

Цитата:

Цитата p1ka4y777
в файл имя которого задано последним. »

Крайне неудачный, на мой взгляд, выбор. Три четверти пакетного файла будут посвящены определению этого последнего аргумента и отсечению его от остальных.

Код:

@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 2244310

спасибо за отзыв...
хотелось бы уточнить пару моментов, таких как:
Цитата:

setlocal enableextensions enabledelayedexpansion
%~1
%~nx0
/b 2
объясните, если не сложно, буду очень благодарен

Iska 31-10-2013 03:07 2244334

Код:

setlocal /?
call /?
exit /?

На конкретные вопросы будут даваться ответы.


Время: 22:13.

Время: 22:13.
© OSzone.net 2001-