Создать простой батник копирования с заменой файла

  • Автор темы Автор темы HotBeer
  • Дата начала Дата начала
  • Теги Теги
    bat
Если оставить такой путь
O:\ЖУРНАЛ ВКС 2024г..xls"
то не удаётся найти указанный файл
если поставить любой другой путь, например
"O:\1.txt"
то батник работает
Похоже, что проблема может быть связана с использованием русских символов в пути к файлу. Попробуйте переименовать файл "ЖУРНАЛ ВКС 2024г..xls" на что-то без русских символов, например, "Journal_VKS_2024.xls", и затем попробуйте скопировать его с помощью следующего скрипта:

CMD/BATCH:
@echo off
set "source=O:\Journal_VKS_2024.xls"
set "destination=C:\Мои документы\backup\"

copy /Y /V "%source%" "%destination%"
pause

Сохраните этот скрипт, запустите его и проверьте, устраняется ли проблема с копированием файла после изменения имени файла. Пожалуйста, дайте мне знать, помогло ли это.
 
Попробуйте переименовать файл "ЖУРНАЛ ВКС 2024г..xls" на что-то без русских символов, например, "Journal_VKS_2024.xls",
Так работает, но мне нужно использовать русское название файла
 
Так работает, но мне нужно использовать русское название файла
Понял. Если вам необходимо использовать русское название файла, вам нужно добавить кодировку UTF-8 в ваш пакетный файл. Попробуйте следующий вариант скрипта с добавлением кодировки:

CMD/BATCH:
@echo off
chcp 65001 > nul
set "source=O:\ЖУРНАЛ ВКС 2024г..xls"
set "destination=C:\Мои документы\backup\"

copy /Y /V "%source%" "%destination%"
pause

Этот скрипт устанавливает кодировку консоли на UTF-8 (код 65001), что позволяет обрабатывать русские символы в путях к файлам. Сохраните этот скрипт, запустите его и проверьте, работает ли копирование файла с русским названием теперь. Пожалуйста, дайте знать, помогло ли это.
 
Тогда так The system cannot find the file specified.
Понял. Возможно, проблема связана с тем, что командная строка не распознает путь с русскими символами. Попробуйте использовать короткий путь к файлу (8.3 имена файлов) вместо полного пути. Вы можете получить короткий путь, используя команду dir /x в командной строке. Попробуйте следующий вариант скрипта:

CMD/BATCH:
@echo off
set "source=O:\ЖУРНАЛ~1.XLS"
set "destination=C:\Мои документы\backup\"

copy /Y /V "%source%" "%destination%"
pause

Замените ЖУРНАЛ~1.XLS на короткое имя вашего файла. Сохраните скрипт, запустите его и проверьте, удается ли скопировать файл с русским названием теперь. Пожалуйста, дайте знать, помогло ли это.
 
Так же не удаётся найти указанный файл
 
Так же не удаётся найти указанный файл
Понимаю вашу проблему. Попробуйте использовать специальный метод, который позволяет обращаться к файлам с русскими символами в пути. Для этого можно воспользоваться командой robocopy, которая более гибко обрабатывает пути с нестандартными символами. Попробуйте следующий скрипт:

CMD/BATCH:
@echo off
set "source=O:\ЖУРНАЛ ВКС 2024г..xls"
set "destination=C:\Мои документы\backup\"

robocopy "%source%" "%destination"
pause

Сохраните этот скрипт, запустите его и проверьте, удается ли скопировать файл с русским названием с помощью robocopy. Пожалуйста, дайте мне знать, помогло ли это.
 
Нет не помогло, тут проблема не в использовании команд copy, xcopy или robocopy. Проблема именно в кодировке, в какой кодировке бы батник не сохранил, при его просмотре всегда иероглифы, то есть копирования не происходит, так как компьютер не видит исходный файл для копирования, то есть при просмотре батника вот такой результат при нажатии при редактировании пути
set source="O:\╞╙╨═└╦ ┬╩╤ 2024.xls"
 
Нет не помогло, тут проблема не в использовании команд copy, xcopy или robocopy. Проблема именно в кодировке, в какой кодировке бы батник не сохранил, при его просмотре всегда иероглифы, то есть копирования не происходит, так как компьютер не видит исходный файл для копирования, то есть при просмотре батника вот такой результат при нажатии при редактировании пути
set source="O:\╞╙╨═└╦ ┬╩╤ 2024.xls"
Понимаю вашу проблему с кодировкой. Для сохранения батников с русскими символами в кодировке UTF-8 и их корректного отображения в командной строке Windows, вам нужно использовать специальные символы эскейпа для русских букв. Попробуйте следующий вариант скрипта:

CMD/BATCH:
@echo off
chcp 65001 > nul
set "source=O:\ЖУРНАЛ ВКС 2024г..xls"
set "destination=C:\Мои документы\backup\"

copy /Y /V "%source%" "%destination%"
pause

Этот скрипт устанавливает кодировку консоли на UTF-8 (код 65001) и должен корректно обрабатывать русские символы в путях к файлам. Попробуйте сохранить скрипт с этими изменениями и запустить его. Пожалуйста, дайте мне знать, помог ли этот вариант.
 
Ты уже давал этот код и он не помог.
Для того, чтобы знать в какой кодировке сохранять бат файл, для начала нужно посмотреть какая сейчас по-умолчанию стоит. Посмотрел кодировку в cmd командой chcp и текущая кодировка
Текущая кодовая страница: 866
 
Ты уже давал этот код и он не помог.
Для того, чтобы знать в какой кодировке сохранять бат файл, для начала нужно посмотреть какая сейчас по-умолчанию стоит. Посмотрел кодировку в cmd командой chcp и текущая кодировка
Текущая кодовая страница: 866
Понял, спасибо за информацию о текущей кодировке. Давайте попробуем сохранить батник с кодировкой 866 (DOS Cyrillic) и использовать специальные символы эскейпа для русских букв. Попробуйте следующий вариант скрипта:

CMD/BATCH:
@echo off
chcp 866 > nul
set "source=O:\ЖУРНАЛ ВКС 2024г..xls"
set "destination=C:\Мои документы\backup\"

copy /Y /V "%source%" "%destination%"
pause

Попробуйте сохранить скрипт с этими изменениями, запустить его и проверить, удается ли скопировать файл с русским названием с использованием кодировки 866. Пожалуйста, дайте мне знать, помог ли этот вариант.
 
тоже не работает, не удается найти указанный файл
 
тоже не работает, не удается найти указанный файл
Понимаю вашу проблему. В таком случае, возможно, стоит попробовать другой подход. Один из вариантов - использовать специальные символы эскейпа для русских букв в пути к файлу. Попробуйте следующий вариант скрипта:

CMD/BATCH:
@echo off
setlocal enableDelayedExpansion
set "source=O:\ЖУРНАЛ ВКС 2024г..xls"
set "destination=C:\Мои документы\backup\"

set "sourceEsc="
for %%I in ("%source%") do set "sourceEsc=!sourceEsc!%%~sI"

copy /Y /V "!sourceEsc!" "%destination%"
pause

Этот скрипт использует символы эскейпа для пути к файлу с русскими символами. Попробуйте сохранить скрипт с этими изменениями, запустить его и проверить, удается ли скопировать файл с русским названием. Пожалуйста, дайте мне знать, помог ли этот вариант.
 
@HotBeer, открывающие кавычки опять не там, где нужно.
 
Код:
@echo off
setlocal enableDelayedExpansion
set source="O:\ЖУРНАЛ ВКС 2023.xls"
set destination="C:\backup\"

set "sourceEsc="
for %%I in ("%source%") do set "sourceEsc=!sourceEsc!%%~sI"

copy /Y /V "!sourceEsc!" "%destination%"
pause
пути немного поменял, но все равно
C:\bat_cmd\тесты>setlocal enableDelayedExpansion

C:\bat_cmd\тесты>set source="O:\╨Ц╨г╨а╨Э╨Р╨Ы ╨Т╨Ъ╨б 2023.xls"

C:\bat_cmd\тесты>set destination="C:\backup\"

C:\bat_cmd\тесты>set "sourceEsc="

C:\bat_cmd\тесты>for %I in (""O:\╨Ц╨г╨а╨Э╨Р╨Ы ╨Т╨Ъ╨б 2023.xls"") do set "sourceEsc=!sourceEsc!%~sI"

C:\bat_cmd\тесты>set "sourceEsc=!sourceEsc!C:\bat_cmd\53A9~1\"O:\╨Ц╨г╨а╨Э╨Р╨Ы"

C:\bat_cmd\тесты>set "sourceEsc=!sourceEsc!C:\bat_cmd\53A9~1\╨Т╨Ъ╨б"

C:\bat_cmd\тесты>set "sourceEsc=!sourceEsc!C:\bat_cmd\53A9~1\2023.xls"""

C:\bat_cmd\тесты>copy /Y /V "!sourceEsc!" ""C:\backup\""
C:\bat_cmd\53A9~1\O:\╨Ц╨г╨а╨Э╨Р╨ЫC:\bat_cmd\53A9~1\╨Т╨Ъ╨бC:\bat_cmd\53A9~1\2023.xls C:\backup\*
Синтаксическая ошибка в имени файла, имени папки или метке тома.
Скопировано файлов: 0.

C:\bat_cmd\тесты>pause
Для продолжения нажмите любую клавишу . . .
 
Назад
Сверху Снизу