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

krambrige 15-12-2018 04:29 2846062

Копирование из списка
 
Привет, подскажите пожалуйста батник для копирования файлов из списка.

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

Iska 15-12-2018 05:02 2846063

Цитата:

Цитата krambrige
Есть список 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 2846069

Мне без разницы в принципе, попробовал оба способа, пишет "Не удается найти указанный файл".



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

Iska 15-12-2018 06:45 2846070

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

krambrige 15-12-2018 06:59 2846071

Поменял, все равно такая же ситуация.

Busla 15-12-2018 10:48 2846088

krambrige, наберите в консоли chcp - что выдаёт?

krambrige 15-12-2018 12:12 2846100

Выдает
Текущая кодовая страница: 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 2846101

Подозреваю, список файлов в текстовом файле с кодировкой 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

Неважно, как указаны имена файлов (с путями или без), по условию:
Цитата:

Цитата krambrige
В папке C:\test лежит куча файлов с названиями из list.txt, эти файлы имеют расширение txt. »


krambrige 15-12-2018 12:18 2846102

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

megaloman 15-12-2018 12:29 2846103

krambrige,
Цитата:

Цитата krambrige
Но в батнике пользователя Iska я менял кодировку на 1251, utf 8, OEM 866 и все равно не выполнялся батник »

Надо было не кодировку батника менять, а кодировку списка файлов.
Мой батник, если в путях, указанных в батнике, имеются русские символы, надо сохранить в 1251 кодировке. Он обрабатывает список файлов в 1251 кодировке. (проверьте, notepad.exe C:\test\list.txt правильно отображает имена файлов?)

krambrige 15-12-2018 12:51 2846117

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

krambrige 15-12-2018 13:15 2846126

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

megaloman 15-12-2018 13:46 2846127

krambrige, прикрепите Ваш текстовый list.txt к сообщению, дайте разобраться с реальностью.
Цитата:

Цитата krambrige
как добавить название файла в самое начало этого файла?
Файлов много, расширение txt, находятся они в папке C:\file »

О каких файлах речь? Что Вы в конце концов хотите получить?

Busla 15-12-2018 14:04 2846128

Цитата:

Цитата krambrige
Я менял везде, ansi верно ведь? потому что в notepade есть 1251 »

ANSI - это целый набор 8-битных национальных кодировок придуманных для старых версий Window
в ПО под этим подразумевается кодировка настроенная в системе для совместимости с не поддерживающими юникод программами

mwz 15-12-2018 14:16 2846131

Цитата:

Цитата megaloman
прикрепите Ваш текстовый list.txt к сообщению »

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

Iska 15-12-2018 14:16 2846132

Цитата:

Цитата krambrige
Но в батнике пользователя Iska я менял кодировку на 1251, utf 8, OEM 866 и все равно не выполнялся батник. »

Кодировка пакетного файла должна быть в OEM/866 (для нашего случая, где в пакетном файле присутствует только латиница, это не суть важно). Кодировка файла также должна быть в OEM/866 (и это критично, поскольку там у Вас не только латиница)

Iska 15-12-2018 14:18 2846133

Цитата:

Цитата mwz
Цитата:

Цитата megaloman
krambrige, прикрепите Ваш текстовый list.txt к сообщению, »

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

Именно так. krambrige, упакуйте Ваш файл list.txt в архив, каковой прикрепите к сообщению, либо выложите на dropmefiles, а ссылку — сюда.

Busla 15-12-2018 15:18 2846150

Цитата:

Цитата Iska
Кодировка файла также должна быть в OEM/866 (и это критично, поскольку там у Вас не только латиница) »

это как раз вопрос очень дискуссионный - на диске имена файлов в юникоде. Сейчас даже если просто средствами проводника сделать копию файла, в её имени длинное тире, которое отсутствует в cp 866

krambrige 15-12-2018 15:33 2846159

Вот https://drive.google.com/open?id=1DM...-NH6WfNcvm2Zo0

Iska 15-12-2018 16:19 2846176

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

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

Цитата:

Цитата Busla
Сейчас даже если просто средствами проводника сделать копию файла, в её имени длинное тире, которое отсутствует в cp 866 »

В каких-то новых ОС? У меня под Windows 7 x64 — обычный дефис, 0x2D.

Busla 15-12-2018 17:11 2846194

Цитата:

Цитата Iska
Ежели же подискутировать, то и Проводник тут не показатель »

у вас нарушена причинно-следственная связь:
формат генерируемых Проводником имён показатель того, что обычно встречается на диске у пользователя

Цитата:

Цитата Iska
В каких-то новых ОС? У меня под Windows 7 x64 — обычный дефис »

почему-то был уверен, что это с Vista тянется, но в 10 1803 - точно
наверняка это на язык системы завязано - длинное тире нехарактерно для английской типографики


Время: 16:37.

Время: 16:37.
© OSzone.net 2001-