Компьютерный форум 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=284466)

bodun123 02-07-2014 11:04 2371007

Как добавить в текстовый файл строку с именем самого файла
 
Подскажите пожалуйста, как добавить в текстовый файл строку с именем самого файла.
есть командный файл :
читать дальше »
@echo off

set dir1=Q:
set dir2=C:\SCAN
set dir3=C:\SCAN\BACK
set log_copy=C:\SCAN\BACK\lcopy.log
set log_move=C:\SCAN\BACK\lmove.log

if exist %dir1% (goto 1) else (goto 2)

:1
echo "-=-=-=- start TRANSFER -=-=-=-=-" >> %log_copy%
date /t >> %log_copy%
time /t >> %log_copy%
copy %dir2%\*.txt %dir1% >> %log_copy%
echo "-=-=-=- finish TRANSFER -=-=-=-=-" >> %log_copy%

echo "-=-=-=- start MOVE BACK -=-=-=-=-" >> %log_move%
date /t >> %log_move%
time /t >> %log_move%
move %dir2%\*.txt %dir3% >> %log_move%
echo "-=-=-=- finish MOVE BACK -=-=-=-=-" >> %log_move%

@echo ----------------------
@echo TRANSFER CONPLITE
@echo ----------------------
goto end

:2
@echo ----------------------
@echo ERROR NO DISK Q:
@echo CONNECT DISK Q:
@echo TRANSFER NO CONPLITE
@echo ----------------------
pause
goto end

:end


который перемещает и копирует файлы в разные директории и делает лог.
как сделать чтоб в файл(ы) добавлялась строка с именем самого файла, желательно в начало...

Iska 02-07-2014 11:26 2371018

Как-то так:
читать дальше »
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sFolder1=Q:\
set sFolder2=C:\SCAN
set sFolder3=C:\SCAN\BACK
set log_copy=C:\SCAN\BACK\lcopy.log
set log_move=C:\SCAN\BACK\lmove.log

if exist "%sFolder1%\." (
        >>"%log_copy%" (
                echo -=-=-=- start TRANSFER -=-=-=-=-
                echo %date% %time%
                echo %log_copy%
               
                copy /y "%sFolder2%\*.txt" "%sFolder1%\"
               
                echo -=-=-=- finish TRANSFER -=-=-=-=-
        )
       
        >>"%log_move%" (
                echo -=-=-=- start MOVE BACK -=-=-=-=-
                echo %date% %time%
                echo %log_move%
               
                move "%dir2%\*.txt" "%sFolder3%\"
               
                echo -=-=-=- finish MOVE BACK -=-=-=-=-
        )
       
        echo ----------------------
        echo TRANSFER CONPLITE
        echo ----------------------
) else (
        echo ----------------------
        echo ERROR NO DISK Q:
        echo CONNECT DISK Q:
        echo TRANSFER NO CONPLITE
        echo ----------------------
)

endlocal
exit /b 0


bodun123 02-07-2014 12:16 2371033

Вложений: 1
немножко не то....
есть папка C:\SCAN - в которой текстовый файл (ы) типа Файл 114698 падают с терминала сбора данных
дальше запускается скрипт
читать дальше »
@echo off

set dir1=Q:
set dir2=C:\SCAN
set dir3=C:\SCAN\BACK
set log_copy=C:\SCAN\BACK\lcopy.log
set log_move=C:\SCAN\BACK\lmove.log

if exist %dir1% (goto 1) else (goto 2)

:1
echo "-=-=-=- start TRANSFER -=-=-=-=-" >> %log_copy%
date /t >> %log_copy%
time /t >> %log_copy%
copy %dir2%\*.txt %dir1% >> %log_copy%
echo "-=-=-=- finish TRANSFER -=-=-=-=-" >> %log_copy%

echo "-=-=-=- start MOVE BACK -=-=-=-=-" >> %log_move%
date /t >> %log_move%
time /t >> %log_move%
move %dir2%\*.txt %dir3% >> %log_move%
echo "-=-=-=- finish MOVE BACK -=-=-=-=-" >> %log_move%

@echo ----------------------
@echo TRANSFER CONPLITE
@echo ----------------------
goto end

:2
@echo ----------------------
@echo ERROR NO DISK Q:
@echo CONNECT DISK Q:
@echo TRANSFER NO CONPLITE
@echo ----------------------
pause
goto end

:end
который проверяет наличие директории " Q:"(сетевой диск) и копирует туда данный файл(ы)...(иначе - выдает ошибку)... и следом перемещает файлик(и) в "C:\SCAN\BACK" - (резервная копия) и пишет параллельно логи lcopy.log и lmove.log...
А как сделать чтобы в файл типа "DB100073801.07.201416-52-35-Doc1.txt", который копируется в "Q:\" добавились строка с его же именем "DB100073801.07.201416-52-35-Doc1" типа стало
читать дальше »

DB100073801.07.201416-52-35-Doc1
1. Отгрузка 4242002436647 00243664194052 0017759#0001006160#11#20140701
1. Отгрузка 4242002436647 24366419405200 0017759#0001006160#11#20140701
1. Отгрузка 4242002436647 00243664194052 0017759#0001006160#11#20140701
1. Отгрузка 4242002436647 00243664194052 0017759#0001006160#11#20140701
1. Отгрузка 4242002436647 64194052009876 0017759#0001006160#11#20140701
1. Отгрузка 4242002436647 64194052009425 0017759#0001006160#11#20140701
1. Отгрузка 3838942536403 24985234730024 0017759#0001006160#11#20140701
1. Отгрузка 3838942536403 24985234730003 0017759#0001006160#11#20140701
1. Отгрузка 4242002436647 64194052009098 0017758#0001006160#11#20140701
1. Отгрузка 4242002436647 00243664194052 0017758#0001006160#11#20140701

Iska 02-07-2014 14:33 2371097

Цитата:

Цитата bodun123
А как сделать чтобы в файл типа "DB100073801.07.201416-52-35-Doc1.txt", который копируется в "Q:\" добавились строка с его же именем »

Пробуйте:
читать дальше »
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sFolder1=Q:\
set sFolder2=C:\SCAN
set sFolder3=C:\SCAN\BACK
set log_copy=C:\SCAN\BACK\lcopy.log
set log_move=C:\SCAN\BACK\lmove.log

call :GetTemporaryName

if exist "%sFolder1%\." (
        >>"%log_copy%" (
                echo -=-=-=- start TRANSFER -=-=-=-=-
                echo %date% %time%
               
                for %%i in ("%sFolder2%\*.txt") do (
                        >"%TemporaryName%" echo %%~nxi
                        >nul copy /y "%TemporaryName%"+"%%~i" "%sFolder1%\%%~nxi"
                        echo %%~nxi
                )
                echo -=-=-=- finish TRANSFER -=-=-=-=-
        )
       
        >>"%log_move%" (
                echo -=-=-=- start MOVE BACK -=-=-=-=-
                echo %date% %time%
               
                for %%i in ("%sFolder2%\*.txt") do (
                        >"%TemporaryName%" echo %%~nxi
                        >nul copy /y "%TemporaryName%"+"%%~i" "%sFolder3%\%%~nxi"
                        del /f /q "%%~i"
                        echo %%~nxi
                )
               
                echo -=-=-=- finish MOVE BACK -=-=-=-=-
        )
       
        del /f /q "%TemporaryName%"
       
        echo ----------------------
        echo TRANSFER CONPLITE
        echo ----------------------
) else (
        echo ----------------------
        echo ERROR NO DISK Q:
        echo CONNECT DISK Q:
        echo TRANSFER NO CONPLITE
        echo ----------------------
)

endlocal
exit /b 0

rem ==========================================================================
rem Функция GetTemporaryName()
rem
rem Серый форум / CMD/BAT: генерация пути для временного файла или папки
rem (http://forum.script-coding.com/viewtopic.php?id=6259)
rem ==========================================================================
:GetTemporaryName
        setlocal enableextensions enabledelayedexpansion

:NextName
        set sTempName=%temp%\temp%random%.tmp

        if exist "%sTempName%" goto :NextName

        set sProcName=%~0

        endlocal & set %sProcName:~4%=%sTempName%
        exit /b 0
rem ==========================================================================


bodun123 02-07-2014 15:28 2371117

Спасибо большое!
Все получилось, уже в работе.
p.s.
добавил ещё паузу чтоб не закрывалась окно консоли при ошибке - отсутствия диска Q
p.p.s.
в конец файла ещё добавляется артефакт "" , мне не мешает.

Iska 03-07-2014 08:05 2371366

Цитата:

Цитата bodun123
в конец файла ещё добавляется артефакт "" , мне не мешает. »

Простите, что добавляется? И в конец какого файла?

bodun123 03-07-2014 11:50 2371463

добавляется символ " " -тут не отображается, по каталогу это Управляющие символы
U+001A 
ещё просьба, можно ли в этом скрипте реализовать - обрезку окончания в добавляющейся строке типа "DB100073801.07.201416-52-35-Doc1.txt" чтоб не было "-Doc1.txt" а осталось только "DB100073801.07.201416-52-35"?
что-то там у 1С-ков не проходит... это окончание.

Iska 03-07-2014 16:05 2371573

Цитата:

Цитата bodun123
добавляется символ " " -тут не отображается, по каталогу это Управляющие символы
U+001A  »

Это обычный ASCII-символ «конец файла». Попробуйте добавить в обе команды «copy» параметр «/b» в виде:
Код:

>nul copy /b /y "%TemporaryName%"+"%%~i" …
Цитата:

Цитата bodun123
ещё просьба, можно ли в этом скрипте реализовать - обрезку окончания в добавляющейся строке типа "DB100073801.07.201416-52-35-Doc1.txt" чтоб не было "-Doc1.txt" а осталось только "DB100073801.07.201416-52-35"?
что-то там у 1С-ков не проходит... это окончание. »

Можно. По каким признакам нужно определять это окончание?

bodun123 03-07-2014 16:31 2371589

Цитата:

Цитата Iska
Можно. По каким признакам нужно определять это окончание? »

просто "-Doc1.txt" - чтоб не было в тексте файла, это константа, или по количеству символов "DB100073801.07.201416-52-35" - 27 - остальные отбросить

Iska 03-07-2014 16:38 2371593

Цитата:

Цитата bodun123
это константа »

То есть, там всегда будет «-Doc1», только «-Doc1» и ничего, окромя «-Doc1». Так?

bodun123 03-07-2014 16:47 2371598

Цитата:

Цитата Iska
окромя «-Doc1». Так? »

ТСД генерирует файл с данными именем - номер сканера, датой и временем и добавляет - "Doc1" и получается что "-Doc1.txt" - паразитная информация внутри файла.
Да удалять только -Doc1.txt во всех файлах.

Iska 09-07-2014 03:52 2373923

Пробуйте:
читать дальше »
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFolder=C:\SCAN
set sDestFolder=Q:\
set sBackupFolder=C:\SCAN\BACK

set sLogFile=%sBackupFolder%\Log.log

call :GetTemporaryName

if not exist "%sSourceFolder%\." (
        echo Can't find source folder [%sSourceFolder%].
        exit /b 1
)

if not exist "%sDestFolder%\." (
        echo Can't find destination folder [%sDestFolder%].
        exit /b 2
)

if not exist "%sBackupFolder%\." (
        echo Can't find folder for backup [%sBackupFolder%].
        exit /b 3
)

>>"sLogFile%" (
        echo Start transfer at %date% %time%
       
        for %%i in ("%sSourceFolder%\*.txt") do (
                set sCurrFileName=%%~ni
                >"%TemporaryName%" echo !sCurrFileName:-doc1=!
                >nul copy /b /y "%TemporaryName%"+"%%~i" "%sDestFolder%\%%~nxi"
                >nul copy /b /y "%TemporaryName%"+"%%~i" "%sBackupFolder%\%%~nxi"
                echo %%~nxi
                del /f /q "%%~i"
        )
       
        echo Finish transfer at %date% %time%
        echo.
)
del /f /q "%TemporaryName%"

endlocal
exit /b 0

rem ==========================================================================
rem Функция GetTemporaryName()
rem
rem Серый форум / CMD/BAT: генерация пути для временного файла или папки
rem (http://forum.script-coding.com/viewtopic.php?id=6259)
rem ==========================================================================
:GetTemporaryName
        setlocal enableextensions enabledelayedexpansion

:NextName
        set sTempName=%temp%\temp%random%.tmp

        if exist "%sTempName%" goto :NextName

        set sProcName=%~0

        endlocal & set %sProcName:~4%=%sTempName%
        exit /b 0
rem ==========================================================================

Многое переделал.

bodun123 09-07-2014 10:00 2373981

Iska, спасибо Вам большое, все отлично работает.


Время: 07:13.

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