Показать полную графическую версию : [решено] Как добавить в текстовый файл строку с именем самого файла
bodun123
02-07-2014, 11:04
Подскажите пожалуйста, как добавить в текстовый файл строку с именем самого файла.
есть командный файл :
@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
который перемещает и копирует файлы в разные директории и делает лог.
как сделать чтоб в файл(ы) добавлялась строка с именем самого файла, желательно в начало...
Как-то так:
@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
немножко не то....
есть папка 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
А как сделать чтобы в файл типа "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
Спасибо большое!
Все получилось, уже в работе.
p.s.
добавил ещё паузу чтоб не закрывалась окно консоли при ошибке - отсутствия диска Q
p.p.s.
в конец файла ещё добавляется артефакт "" , мне не мешает.
в конец файла ещё добавляется артефакт "" , мне не мешает. »
Простите, что добавляется? И в конец какого файла?
bodun123
03-07-2014, 11:50
добавляется символ " " -тут не отображается, по каталогу это Управляющие символы
U+001A
ещё просьба, можно ли в этом скрипте реализовать - обрезку окончания в добавляющейся строке типа "DB100073801.07.201416-52-35-Doc1.txt" чтоб не было "-Doc1.txt" а осталось только "DB100073801.07.201416-52-35"?
что-то там у 1С-ков не проходит... это окончание.
добавляется символ " " -тут не отображается, по каталогу это Управляющие символы
U+001A »
Это обычный ASCII-символ «конец файла». Попробуйте добавить в обе команды «copy» параметр «/b» в виде:
>nul copy /b /y "%TemporaryName%"+"%%~i" …
ещё просьба, можно ли в этом скрипте реализовать - обрезку окончания в добавляющейся строке типа "DB100073801.07.201416-52-35-Doc1.txt" чтоб не было "-Doc1.txt" а осталось только "DB100073801.07.201416-52-35"?
что-то там у 1С-ков не проходит... это окончание. »
Можно. По каким признакам нужно определять это окончание?
bodun123
03-07-2014, 16:31
Можно. По каким признакам нужно определять это окончание? »
просто "-Doc1.txt" - чтоб не было в тексте файла, это константа, или по количеству символов "DB100073801.07.201416-52-35" - 27 - остальные отбросить
это константа »
То есть, там всегда будет «-Doc1», только «-Doc1» и ничего, окромя «-Doc1». Так?
bodun123
03-07-2014, 16:47
окромя «-Doc1». Так? »
ТСД генерирует файл с данными именем - номер сканера, датой и временем и добавляет - "Doc1" и получается что "-Doc1.txt" - паразитная информация внутри файла.
Да удалять только -Doc1.txt во всех файлах.
Пробуйте:
@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
Iska, спасибо Вам большое, все отлично работает.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.