Cmd xcopy команда с unicode символами работает в windows console но не работает в php
Я хочу использовать следующую команду .
xcopy "E:Dropboxdbstore15957_тест_директ.fbx" "E:Dropboxdbstoretest15957_тест_директ.fbx"Когда я использую эту команду в console, то все работает нормально, но когда вызываю из php, файл не копируется.
$command="echo f | xcopy "E:Dropboxdbstore15957_тест_директ.fbx" "E:Dropboxdbstoretest15957_тест_директ.fbx";
$result=exec($command,$out2,$ret2);Я получаю out=0 File(s) copied ret=4 .
Хочу заметить, что когда я вызываю эту команду из console, все не латинские символы замениваются ?, но файл копируется и все работает прекрасно.
Что можно сделать, чтобы решить проблему с utf8 символами?
Xcopy не распознается как внутренняя или внешняя команда, действующая программа или пакетный файл
Это не проблема с Windows 7 или 8. На самом деле это проблема с приложениями, которые обновляют переменные среды, такие как PATH.
Путь хранится в реестре как ” расширяемое строковое значение “(REG_EXPAND_SZ), но многие приложения записывают его обратно в реестр как” строковое значение ” (REG_SZ). Если ваш путь содержит что-либо вроде %SYSTEMROOT%, это не будет расширено в C:Windows (или что у вас есть), если путь sotred в REG_SZ.
исправление просто отредактируйте свой путь вручную с панели управления. Вам нужно внести изменения (например, добавить a ; в конец пути), а затем применить его. Это исправит ваш путь в реестре, чтобы быть REG_EXPAND_SZ.
(Перейдите на панель управления системой и выберите дополнительные системные настройки. Отредактировать переменную среды PATH в нижнем поле, и это должно исправить.
вы можете сказать, нарушен ли ваш путь таким образом, открыв командную строку и набрав путь. Ваш путь будет указан. Если вы можете видеть все, что заключено в% %, тогда ваш путь не расширяется.
Ошибка xcopy "недопустимы путь". использование русских символов в комманде xcopy.
Команда виндовой консоли (cmd)
XCOPY
гораздо лучше своего досовского собрата
COPY
тем, что позволяет копировать всё содержимое папки с подпапками, что не заменимо при написании bat-файлов для задач резервного копирования. И, если описание этой команды найти не сложно (например,
тут
), то описание ошибок практически невозможно.
Обычно после написания первого скрипта мы получаем ошибку “
Недопустимый путь
“.
Вызвана она может быть следующими причинами (в продолжении):
- Русские символы в пути. Дело в том, что по умолчанию консоль работает с кодировкой OEM 866 , а блокнот c ANSI (windows 1251 для руссифицированной винды). Лечится указанием кодировки в начале скрипта chcp 1251 .Единственный минус – на нормальный вывод русских букв после этого без танцев с бубном не надейтесь (он-то по прежнему будет в oem-866).
- Пробелы в пути. Если путь содержит пробелы, то его обязательно заключать в двойные кавычки “”. Да и вообще, проще выработать привычку всегда заключать путь в кавычки в команде xcopy.
- Отсутствует маска файла. Еще одна распространенная ошибка: если надо копировать все содержимое папки, то маску все-равно надо задавать! В следующем виде: “*.*” Если путь заключён в кавычки, то делать это надо следующим образом: маска файла указывается после закрытия кавычки.
Пример:
chcp 1251
xcopy “c:Работа”*.* “d:Резервная копия” /Y /H
Данный bat -файл скопирует все содержимое папкиc:Работа в d:Резервная копия со скрытыми и системными файлами и перезаписью существующих.




