Войти

Показать полную графическую версию : Копирование из списка


Страниц : [1] 2

krambrige
15-12-2018, 04:29
Привет, подскажите пожалуйста батник для копирования файлов из списка.

Есть список C:\test\list.txt, в этом списке название файлов, каждое название с новой строки.
В папке C:\test лежит куча файлов с названиями из list.txt, эти файлы имеют расширение txt.
Нужно скопировать определенные(которые есть в list.txt) файлы из C:\test в папку C:\123.
На форуме есть похожие темы, но ни одна не сработала (там условия другие).

Iska
15-12-2018, 05:02
Есть список C:\test\list.txt, в этом списке название файлов, каждое название с новой строки. »
Только имена? Или полные пути?

Для случая полных путей:
for /f "usebackq delims=" %%i in ("C:\test\list.txt") do copy "%%~i" "C:\123\*.*"
Для только имён:
for /f "usebackq delims=" %%i in ("C:\test\list.txt") do copy "C:\test\%%~i" "C:\123\*.*"

krambrige
15-12-2018, 05:47
Мне без разницы в принципе, попробовал оба способа, пишет "Не удается найти указанный файл".

https://s8.hostingkartinok.com/uploads/images/2018/12/ca7100b5c26a67b5eb46131b6590d280.png

Я так понимаю это кодировка не правильная, нагуглил разные способы: через notepad в OEM-866, ansi, chcp 1251 и тому подобные, что-то не сработало у меня.

Iska
15-12-2018, 06:45
krambrige, файл C:\test\list.txt должен быть сохранён в кодировке OEM/866.

krambrige
15-12-2018, 06:59
Поменял, все равно такая же ситуация.

Busla
15-12-2018, 10:48
krambrige, наберите в консоли chcp - что выдаёт?

krambrige
15-12-2018, 12:12
Выдает
Текущая кодовая страница: 866

Я решил вопрос не много по другому, через 7zip, сперва тоже ошибку выдало про неверную кодировку, потом заработало

Нужно поменять кодировку на utf-8 в list.txt

@echo off
set now=%TIME:~0,-3%
set now=%now::=.%
set now=%now: =0%
set now=%DATE:~-4%.%DATE:~3,2%.%DATE:~0,2%_%now%
7z.exe a -tzip -ssw -mx7 -r0 -x!*.mdx C:\test\%now%.zip @list.txt

megaloman
15-12-2018, 12:13
Подозреваю, список файлов в текстовом файле с кодировкой 1251@Echo Off

Chcp 1251 >nul
Set "Spisok=C:\test\list.txt"
Set "Ext=txt"
Set "BoxIn=C:\test"
Set "BoxOut=C:\123"

For /f "usebackq delims=" %%i in ("%Spisok%") Do Copy "%BoxIn%\%%~ni.%Ext%" "%BoxOut%\" >nul
Неважно, как указаны имена файлов (с путями или без), по условию:В папке C:\test лежит куча файлов с названиями из list.txt, эти файлы имеют расширение txt. »

krambrige
15-12-2018, 12:18
Я точно не скажу, много информации по поводу кодировок пересмотрел, все в голове перемешалось.
Но в батнике пользователя Iska я менял кодировку на 1251, utf 8, OEM 866 и все равно не выполнялся батник.

megaloman
15-12-2018, 12:29
krambrige, Но в батнике пользователя Iska я менял кодировку на 1251, utf 8, OEM 866 и все равно не выполнялся батник »Надо было не кодировку батника менять, а кодировку списка файлов.
Мой батник, если в путях, указанных в батнике, имеются русские символы, надо сохранить в 1251 кодировке. Он обрабатывает список файлов в 1251 кодировке. (проверьте, notepad.exe C:\test\list.txt правильно отображает имена файлов?)

krambrige
15-12-2018, 12:51
Я менял везде (так как сперва не знал в каком файле менять, решил методом тыка), ansi верно ведь? потому что в notepade есть 1251, но она сбрасывается. С помощью Sublime сохранил в 1251, все равно кракозябры.
В общем сейчас я все заново проделал с 7zip, нашел что я там поменял и почему у меня заработало, просто на utf-8 поменял файл с названиями, без использования 7zip не срабатывает у меня.

krambrige
15-12-2018, 13:15
Еще один вопрос возник, не уверен что можно создавать много тем, спрошу тут, не подскажите как добавить название файла в самое начало этого файла?
Файлов много, расширение txt, находятся они в папке C:\file

megaloman
15-12-2018, 13:46
krambrige, прикрепите Ваш текстовый list.txt к сообщению, дайте разобраться с реальностью.как добавить название файла в самое начало этого файла?
Файлов много, расширение txt, находятся они в папке C:\file »
О каких файлах речь? Что Вы в конце концов хотите получить?

Busla
15-12-2018, 14:04
Я менял везде, ansi верно ведь? потому что в notepade есть 1251 »
ANSI - это целый набор 8-битных национальных кодировок придуманных для старых версий Window
в ПО под этим подразумевается кодировка настроенная в системе для совместимости с не поддерживающими юникод программами

mwz
15-12-2018, 14:16
прикрепите Ваш текстовый list.txt к сообщению »

Думаю что лучше, если в архиве. Бережёного бог бережёт: тогда заведомо будет лежать в исходном виде.

Iska
15-12-2018, 14:16
Но в батнике пользователя Iska я менял кодировку на 1251, utf 8, OEM 866 и все равно не выполнялся батник. »
Кодировка пакетного файла должна быть в OEM/866 (для нашего случая, где в пакетном файле присутствует только латиница, это не суть важно). Кодировка файла также должна быть в OEM/866 (и это критично, поскольку там у Вас не только латиница)

Iska
15-12-2018, 14:18
krambrige, прикрепите Ваш текстовый list.txt к сообщению, »
Думаю что лучше, если в архиве. Бережёного бог бережёт: тогда заведомо будет лежать в исходном виде. »
Именно так. krambrige, упакуйте Ваш файл list.txt в архив, каковой прикрепите к сообщению, либо выложите на dropmefiles, а ссылку — сюда.

Busla
15-12-2018, 15:18
Кодировка файла также должна быть в OEM/866 (и это критично, поскольку там у Вас не только латиница) »
это как раз вопрос очень дискуссионный - на диске имена файлов в юникоде. Сейчас даже если просто средствами проводника сделать копию файла, в её имени длинное тире, которое отсутствует в cp 866

krambrige
15-12-2018, 15:33
Вот https://drive.google.com/open?id=1DMrtW0hKfcDZmCSnlV-NH6WfNcvm2Zo0

Iska
15-12-2018, 16:19
Busla, тут без дискуссий: если в именах файлов наличествует юникод — добро пожаловать в PowerShell. Можно, конечно, поизвращаться с обходными вариантами, но PowerShell — проще. Конкретно в файле автора — в одном имени файла («Ни Суарес ни Кавани — только Стуани Кто меняет историю Жироны.txt») тире есть, и именно длинное — Em Dash.

Ежели же подискутировать, то и Проводник тут не показатель: файловая система вполне позволяет такие имена, на которых тот же Проводник тупо откажется работать.

Сейчас даже если просто средствами проводника сделать копию файла, в её имени длинное тире, которое отсутствует в cp 866 »
В каких-то новых ОС? У меня под Windows 7 x64 — обычный дефис, 0x2D.




© OSzone.net 2001-2012