Я предлагаю следующий пакетный файл для этой задачи:
@echo off
if "%CD:~-1%" == "\" (
set "destination=%CD%Database.sql"
set "ddlDirectory=%CD%Test"
) else (
set "destination=%CD%\Database.sql"
set "ddlDirectory=%CD%\Test"
)
echo Destination file: "%destination%"
echo DDL directory: "%ddlDirectory%"
del "%destination%" 2>nul
set "FirstFile=yes"
for %%I in ("%ddlDirectory%\*.sql") do (
if not defined FirstFile (
echo/>>"%destination%"
echo/>>"%destination%"
) else set "FirstFile="
echo -- **********************************************************************>>"%destination%"
echo -- Contents of file: %%~fI>>"%destination%"
echo -- **********************************************************************>>"%destination%"
type "%%I" >>"%destination%"
)
pause
Обратите внимание, что порядок файлов * .sql, обрабатываемых циклом FOR , как здесь используется, зависит от именования файловпорядок файловой системы.В драйверах NTFS порядок имен файлов является буквенным (более или менее), тогда как на дисках FAT32 и exFAT порядок имен файлов зависит от последнего доступа для записи в каталог.
Тот же пакетный файл со списком имен файлов, указанным вцикл FOR вместо обработки всех файлов * .sql в папке.
@echo off
if "%CD:~-1%" == "\" (
set "destination=%CD%Database.sql"
set "ddlDirectory=%CD%Test"
) else (
set "destination=%CD%\Database.sql"
set "ddlDirectory=%CD%\Test"
)
echo Destination file: "%destination%"
echo DDL directory: "%ddlDirectory%"
del "%destination%" 2>nul
set "FirstFile=yes"
for %%I in (
"02. Create Schemas.sql"
"03. Create Tables.sql"
) do (
if exist "%ddlDirectory%\%%~I" (
if not defined FirstFile (
echo/>>"%destination%"
echo/>>"%destination%"
) else set "FirstFile="
echo -- **********************************************************************>>"%destination%"
echo -- Contents of file: "%ddlDirectory%\%%~I">>"%destination%"
echo -- **********************************************************************>>"%destination%"
type "%ddlDirectory%\%%~I" >>"%destination%"
)
)
pause
Проверка существующего файла выполняется перед записью имени файла в текстовый файл назначения.
Чтобы понять используемые команды и то, как они работают, откройте окно командной строки, выполните там следующие команды и очень внимательно прочитайте все страницы справки, отображаемые для каждой команды.
cmd /?
... cmd.exe
- командный процессор Windows, выполняющий пакетный файл.На последней странице справки объясняется, что имя файла с пробелом или один из этих символов &()[]{}^=;!'+,`~
должен быть заключен в двойные кавычки. echo /?
for /?
if /?
pause /?
set /?
type /?
Обратите внимание, что пробел оставлен оператору перенаправления >>
в перенаправленных ECHO командных строках записывается в виде конечного пробела в текстовый файл.
См. Также тему форума DosTips: ECHO.Не в состоянии дать текст или пустую строку - вместо этого используйте ECHO /