Seryoga204 |
24-08-2010 23:14 1481032 |
Имя файла из строки копируемого файла.
Подскажите пожалуйста, можно переименовать все копируемые файлы из директории, чтобы их имена соответствовали тексту содерж. в них самих во второй строке с 10 по 15 знак.
|
Seryoga204,
на скорую руку, хотя надо еще попробовать с enableddelayedexpansion. Какая у Вас ОС?
Код:
Echo on & [b]Chcp 1251[b]
Set "$SRS=F:\probe\переименование\001" & rem папка источник
Set "$DST=F:\probe\переименование\002" & rem папка приемник
Cd %$SRS%
For /f %%a in ('Dir /b %$SRS%') Do ^
For /f "skip=1" %%b in (%%~a) Do ^
call :RNCOPY "%%b" "%%a"
goto :EOF
:RNCOPY
Set $nm=%~1
Set $nm=%$nm:~9,6%
Copy "%~2" "%$DST%\%$nm%~x2"
|
Seryoga204 |
24-08-2010 23:48 1481052 |
Win XP.SP3
вот log
Код:
L:\TOOLS\Print>Echo on & Chcp 866
Текущая кодовая страница: 866
L:\TOOLS\Print>Set $SRS="L:\1" & rem яряър шёЄюіэшъ
L:\TOOLS\Print>Set $DST="L:\2" & rem яряър яЁшхьэшъ
L:\TOOLS\Print>Cd "L:\1"
L:\1>For /F %a in ('Dir /b "L:\1" ') Do For /F "skip=1" %b in (%~a) Do call :RNC
OPY "%b" "%a"
L:\1>For /F "skip=1" %b in (0000) Do call :RNCOPY "%b" "0000"
L:\1>call :RNCOPY "отделы" "0000"
L:\1>Set $nm=отделы
L:\1>Set $nm=
L:\1>Copy "0000" ""L:\2" \~x2"
Системе не удается найти указанный путь.
Скопировано файлов: 0.
|
Seryoga204 |
25-08-2010 00:38 1481079 |
Цитата:
Строка №2 содержит пробелы?
|
пример: отделы отчетный № 8456/ 2060
хотелось чтобы файл назывался 2060.txt
Файлы в досовской кодировке, или это не влияет?
|
Seryoga204 |
25-08-2010 01:44 1481104 |
deepred, Спасибо большое! Подскажите пожалуйста как на первом примере вытащить из файла не первое слово 2-ой строки, а всю строку
Код:
1>call :RNCOPY "отделы отчетный № 8456/2060" "0000"
|
Seryoga204 |
25-08-2010 18:54 1481597 |
deepred,
Код:
Код: Echo on & Chcp 866
Set $SRS="F:\probe\переименование\001"
Set $DST="F:\probe\переименование\002"
Cd %$SRS% For /f %%a in ('Dir /b %$SRS%') Do ^
For /f "skip=1 tokens=2 delims=/" %%b in (%%~a) Do ^
Copy "%%a" "%$DST%\%%b%%~xa"
pause
Почему то берется название не со второй строки, а почти со всех где в тексте есть "/".
Из 20 файлов в папке "F:\probe\переименование\002" появилось 4900 шт.
Первый пример берет название из нужной (из второй строки), но лиш первое слово "отделы", а надо из второй строки : "отделы отчетный № 8456/ 2060............................" извлечь 2060 (с 24-ого по 27-ой символ). Структура второй строки во всех файлах одинаковая. Буду эксперементировать. Спасибо.
|
Seryoga204,
Цитата:
Цитата Seryoga204
в них самих во второй строке с 10 по 15 знак. »
|
Цитата:
Цитата Seryoga204
отделы отчетный № 8456/2060 »
|
Цитата:
Цитата Seryoga204
вытащить из файла не первое слово 2-ой строки, а всю строку »
|
Цитата:
Цитата Seryoga204
а надо из второй строки : "отделы отчетный № 8456/2060............................" извлечь 2060 (с 24-ого по 27-ой символ) »
|
приведите, что у Вас во второй строке полностью и пример последующих строк..., на этом раз счет символов именно тот, который нужно извлекать?
|
Seryoga204 |
25-08-2010 19:53 1481642 |
Вложений: 1
Вот пример файлика, кол-во строк может быть разным, но структура первых трех всегда одинаковая.
Цитата:
в них самих во второй строке с 10 по 15 знак.
|
- обшибся в начале, надо имено
Цитата:
"отделы отчетный № 8456/2060" извлечь 2060 даже не (с 24-ого по 27-ой символ) а с 25-ого по 28-ой символ (там есть два пробела вместе)
|
|
Seryoga204,
попробуйте:
Код:
Echo on & Chcp 1251
Setlocal EnabledelayedExpansion
Set "$SRS=F:\probe\переименование\001\" & rem папка источник
Set "$DST=F:\probe\переименование\002\" & rem папка приемник
Cd %$SRS%
For /f %%a in ('Dir /b %$SRS%') Do ^
For /f "skip=1" %%b in (%$SRS%%%~a) Do (
set /a $N+=1
call :RNCOPY "%%b" "%%a")
goto :EOF
:RNCOPY
If /i %$N% GTR 1 set $N=0 & goto :Eof
Set $nm=%~1
Set $nm=%$nm:~23,4%
Copy "%$SRS%%~2" "%$DST%%$nm%%~x2"
предыдущие посты с кодами я удалил - условиям задачи они не соответствуют... (да я уже на них смотрю и не понимаю, что сделать надо было....)
|
deepred, немного упростил и подправил Ваш вариант:
Код:
Echo on & Chcp 1251
Setlocal EnabledelayedExpansion
Set "$SRS=F:\probe\переименование\001\" & rem папка источник
Set "$DST=F:\probe\переименование\002\" & rem папка приемник
Cd %$SRS%
For /f %%a in ('Dir /b %$SRS%') Do call :RNCOPY "%%a"
goto :EOF
:RNCOPY
For /f "skip=1 tokens=*" %%b in (%$SRS%%~1) Do (
Set $nm=%%b
Set $nm=!$nm:~24,4!
Copy "%$SRS%%~1" "%$DST%!$nm!%~x1"
goto :Eof
)
|
gora,
спасибо, да так действительно попроще, а вот "нововведение" про чтение с 25-го символа я незаметил...
|
Цитата:
Цитата deepred
"нововведение" про чтение с 25-го символа я незаметил »
|
Я взял прикрепленный файл, а в нем вторая строка такова:
Код:
Отделы отчетный N 8456/2060
|
gora,
да-да, но опять таки - можно было ориентироваться на < "tokens=2 delims=/" >
|
Seryoga204 |
25-08-2010 22:08 1481736 |
Всем спасибо! Все работает отлично.
|
Seryoga204 |
04-10-2010 22:11 1511464 |
Код:
Echo on & Chcp 1251
Setlocal EnabledelayedExpansion
Set "$SRS=F:\probe\переименование\001\" & rem папка источник
Set "$DST=F:\probe\переименование\002\" & rem папка приемник
Cd %$SRS% For /f %%a in ('Dir /b %$SRS%') Do call :RNCOPY "%%a"
goto :EOF
:RNCOPY
For /f "skip=1 tokens=*" %%b in (%$SRS%%~1) Do (
Set $nm=%%b
Set $nm=!$nm:~24,4!
Copy "%$SRS%%~1" "%$DST%!$nm!%~x1"
goto :Eof )
Подскажите пожалуйста как сделать чтобы название файла бралось не с одной строки, а с нескольких. Пример текста в файле:
Код:
МЕМОРИАЛЬНИЙ ОРДЕР N-R=100211
от 20 июня 2010 г.
000 352200000
Надо чтобы имя получилось "от 20 июня 2010 г._Dt3522_100211.txt", т.е. вторая строка с 17символа(18)&"_Dt"&шестая строка c 48 символа(4)&"_"&первая строка с 39 символа(6).
|
Seryoga204, сделано по, предоставленному Вами, образцу файла
Код:
@Echo Off & Chcp 1251>Nul
Setlocal EnabledelayedExpansion
Set "$SRS=F:\probe\переименование\001\" & rem папка источник
Set "$DST=F:\probe\переименование\002\" & rem папка приемник
Cd %$SRS%
For /f %%a in ('Dir /b %$SRS%') Do call :RNCOPY "%%a"
goto :EOF
:RNCOPY
Set cnt=0
For /f "tokens=* delims=" %%b in (%$SRS%%~1) Do (
Set /a cnt+=1
Set $nm=%%b
If !cnt!==1 Set $lin!cnt!=!$nm:~38,6!
If !cnt!==2 Set $lin!cnt!=!$nm:~17,18!
If !cnt!==3 Set $lin!cnt!=!$nm:~43,4!
)
Copy "%$SRS%%~1" "%$DST%!$lin2!_Dt!$lin3!_!$lin1!%~x1">Nul
goto :Eof
|
Seryoga204 |
05-10-2010 20:14 1512189 |
gora,
Спасибо большое!
|
Подскажите пожалуйста, использую код
Код:
Echo on & Chcp 1251
Setlocal EnabledelayedExpansion
Set "$SRS=F:\probe\переименование\001\" & rem папка источник
Set "$DST=F:\probe\переименование\002\" & rem папка приемник
Cd %$SRS%
For /f %%a in ('Dir /b %$SRS%') Do call :RNCOPY "%%a"
goto :EOF
:RNCOPY
For /f "skip=1 tokens=*" %%b in (%$SRS%%~1) Do (
Set $nm=%%b
Set $nm=!$nm:~24,10!
Copy "%$SRS%%~1" "%$DST%!$nm!%~x1"
goto :Eof
)
Под отбор попадает как раз фрагмент строки с датой(типа: 01/01/2011 ), но так как имеет место символ "/", батник не может присвоить данное название файлу, как поступить в таком случае? Чтобы имя файла было 2011-01-01.txt Подскажите пожалуйста.
|
AlexVong, попробовать дополнительно воспользоваться заменой «set VarY=%VarX:/=-%»?!
Цитата:
Цитата set /?
Подстановка переменной среды может быть расширена следующим образом:
расширит действие переменной среды PATH, заменяя каждое вхождение "str1" в расширенном результате на "str2". "str2" может быть пустой строкой для
эффективного удаления вхождений "str1" из расширенного вывода. "str1" может начинаться со звездочки, и в этом случае это будет соответствовать любому началу расширенного вывода до первого вхождения оставшейся части "str1".
|
Пример:
Код:
@echo off
setlocal
set sName=01/01/2011
set sName=%sName:/=-%
echo %sName%
endlocal
exit /b 0
|
А как сделать чтобы это имя выводилось на экран? Типа "скопирован файл за sName"
|
Код:
echo скопирован файл за %sName%
|
Время: 13:45.
© OSzone.net 2001-