Move ошибка в синтаксисе команды

Надо переместить файлы 111.txt, 222.java в папку 12345. Папка и файлы находятся в одной директории.

Пишу команду move 111.txt, 222.java 12345. Получаю "Ошибка в синтаксисе команды."

В хелпе написано следующее:

>help move
Перемещение файлов и переименование файлов и папок

Перемещение одного или более файлов:
MOVE [/Y | /-Y] [диск:][путь]имя_файла1[,...] назначение

Переименование папки:
MOVE [/Y | /-Y] [диск:][путь]имя_папки новое_имя_папки

  [диск:][путь]имя_файла1 Определяет местоположение файла или файлов, которые
                          необходимо переместить.
  Назначение              Определяет новое местоположение файла. Назначение
                          может состоять из буквы диска (с последующим
                          двоеточием), имени папки или их комбинации. При
                          перемещении только одного файла, можно указать и его
                          новое имя, если хотите выполнить его одновременное
                          переименование при перемещении.
  [диск:][путь]имя_папки  Определяет папку, которую необходимо переименовать.
  новое_имя_папки         Определяет новое имя папки.

  /Y                      Перезаписывать существующие файлы назначения без
                          предупреждения.
  /-Y                     Предупреждать при перезаписи существующего файла
                          назначения.

Ключ /Y может присутствовать в значении переменной среды окружения COPYCMD.
Оно может перекрываться ключом /-Y в командной строке. По умолчанию
используется предупреждение о перезаписи, если только команда MOVE не
выполняется как часть пакетного файла.

The problem here is probably the backslashes which have significant meaning inside of interpolated Ruby strings, double-quoted but also backtick-style shell commands.

As such your command is being interpreted as:

move /y c:^Iechprogs^Gzzz.azz c:^Iechprogs^Gutorun.bat

Where ^I is "t" which is a tab character, and ^G is "a" which is a bell character.

Instead:

`move /y c:\techprogs\azzz.azz c:\techprogs\autorun.bat`

Now remember that Ruby has a very comprehensive library of functions you can use to address this directly. Don’t treat it like a fancy shell scripting language:

require 'fileutils'

FileUtils.mv('c:techprogsazzz.azz', 'c:techprogsautorun.bat', force: true)

Where here I’m using single quotes to avoid the double backslashes and force: true is the equivalent of /y. This uses FileUtils.mv, part of a whole package of useful file and directory manipulation utilities.

As a plus you also get proper exceptions if something goes wrong, or an error code if the move failed.

Added by barlop

Confirming the above. Double backslash fixes it, and i see via doing puts `echo copy /y c:techprogs…` what happens with single backslash, I see the t of techprogs removed, as c:techprogs became c:<ascii-9>echprogs. And autorun became <ascii-7>utorun

C:rubytest>cmdoutoutwithoutinitbat.rb | xxd
0000000: 6162 6364 6566 670d 0a63 6f70 7920 2f79  abcdefg..copy /y
0000010: 2063 3a09 6563 6870 726f 6773 0775 746f   c:.echprogs.uto
0000020: 7275 6e2e 6261 7420 633a 0965 6368 7072  run.bat c:.echpr
0000030: 6f67 7307 7a7a 7a2e 617a 7a0d 0a61 6263  ogs.zzz.azz..abc
0000040: 6465 6667 0d0a 6d6f 7665 202f 7920 633a  defg..move /y c:
0000050: 0965 6368 7072 6f67 7307 7a7a 7a2e 617a  .echprogs.zzz.az
0000060: 7a20 633a 0965 6368 7072 6f67 7307 7574  z c:.echprogs.ut
0000070: 6f72 756e 2e62 6174 0d0a                 orun.bat..

C:rubytest>

  • Remove From My Forums
  • Вопрос

  • Хочу переместить все *exe файлы,находящиеся в поддиреториях Program Files, в директорию test.

    c:/Progam Files/test/>move ..**exe
    Синтаксическая ошибка в имени файла, имени папки или метке тома.

    что я делаю не так?

Ответы

  • вот так будет точнее:

    dir .. -Recurse -Filter *.exe| ?{!(($_.FullName|Split-Path) -like (Resolve-Path ..).Path)} |move -ErrorAction SilentlyContinue

    из процесса копировнаия исключены файлы, которые находятся непосредственно в директории directory_01 (копируются только файлы из поддиректорий директории directory_01, но не из самой directory_01)


    my blog: http://shserg.ru/

    • Изменено

      10 февраля 2012 г. 18:51

    • Помечено в качестве ответа
      Vasily GusevModerator
      21 марта 2012 г. 0:30

#ruby #windows #cmd

#ruby #Windows #cmd

Вопрос:

в ruby в Windows выполнение командной строки cmd ‘move’ выдает ошибку «Синтаксис команды неверен».

Но это работает за пределами ruby

 C:rubytest>echo asdf>c:techprogsazzz.azz

C:rubytest>del c:techprogsazzz.azz

C:rubytest>echo asdf>c:techprogsazzz.azz

C:rubytest>move /y c:techprogsazzz.azz c:techprogsautorun.bat
        1 file(s) moved.

C:rubytest>move /y c:techprogsazzz.azz c:techprogsautorun.bat
The system cannot find the file specified.

C:rubytest>
  

Все вышеперечисленное прекрасно и ожидаемо.

Обратите внимание, я никогда не получаю сообщение об ошибке «Синтаксис команды неверен».

Затем попробуйте в ruby

У меня есть простой файл с одной строкой

 C:rubytest>type syntaxcommandincorrect.rb
`move /y c:techprogsazzz.azz c:techprogsautorun.bat`

C:rubytest>
  

Но это выдает ошибку о синтаксисе

 C:rubytest>del c:techprogsazzz.azz

C:rubytest>ruby syntaxcommandincorrect.rb
The syntax of the command is incorrect.

C:rubytest>echo asdf>c:techprogsazzz.azz

C:rubytest>ruby syntaxcommandincorrect.rb
The syntax of the command is incorrect.

C:rubytest>
  

Комментарии:

1. Помните, что внутри обратных символов обратные косые черты имеют особое значение и их необходимо экранировать. Рассмотрим: move /y c:techprogs ...

2. @tadman спасибо, вероятно, это все, я проверю, когда вернусь к этому компьютеру

Ответ №1:

Проблема здесь, вероятно, в обратной косой черте, которая имеет существенное значение внутри интерполированных строк Ruby, в двойных кавычках, но также в командах командной строки в стиле обратного нажатия.

Таким образом, ваша команда интерпретируется как:

 move /y c:^Iechprogs^Gzzz.azz c:^Iechprogs^Gutorun.bat
  

Где ^I это "t" символ табуляции, а ^G это "a" символ колокола.

Вместо:

 `move /y c:techprogsazzz.azz c:techprogsautorun.bat`
  

Теперь помните, что Ruby обладает очень обширной библиотекой функций, которые вы можете использовать для решения этой проблемы напрямую. Не относитесь к этому как к причудливому языку сценариев оболочки:

 require 'fileutils'

FileUtils.mv('c:techprogsazzz.azz', 'c:techprogsautorun.bat', force: true)
  

Где здесь я использую одинарные кавычки, чтобы избежать двойной обратной косой черты и force: true является эквивалентом /y . При этом используется FileUtils.mv часть целого пакета полезных утилит для работы с файлами и каталогами.

В качестве плюса вы также получаете соответствующие исключения, если что-то пойдет не так, или код ошибки, если перемещение не удалось.

Добавлено barlop

Подтверждаю вышесказанное. Двойная обратная косая черта исправляет это, и я вижу, что выполнение ставит `echo copy / y c:techprogs…»что происходит с одной обратной косой чертой, я вижу, что t из techprogs удалены, как c:techprogs стало c:<ascii-9>echprogs. И autorun стало <ascii-7>utorun

 C:rubytest>cmdoutoutwithoutinitbat.rb | xxd
0000000: 6162 6364 6566 670d 0a63 6f70 7920 2f79  abcdefg..copy /y
0000010: 2063 3a09 6563 6870 726f 6773 0775 746f   c:.echprogs.uto
0000020: 7275 6e2e 6261 7420 633a 0965 6368 7072  run.bat c:.echpr
0000030: 6f67 7307 7a7a 7a2e 617a 7a0d 0a61 6263  ogs.zzz.azz..abc
0000040: 6465 6667 0d0a 6d6f 7665 202f 7920 633a  defg..move /y c:
0000050: 0965 6368 7072 6f67 7307 7a7a 7a2e 617a  .echprogs.zzz.az
0000060: 7a20 633a 0965 6368 7072 6f67 7307 7574  z c:.echprogs.ut
0000070: 6f72 756e 2e62 6174 0d0a                 orun.bat..

C:rubytest>
  

Комментарии:

1. Я протестирую эту обратную косую черту. Но это не объясняет, почему это в ruby не выдает ошибки, copy c:techprogsazzz.azz c:techprogsautorun.bat кроме того, выполнение move /y c:^techprogs^azzz.azz c:^techprogs^autorun.bat в командной строке говорит, что The system cannot find the file specified. это ничего не говорит о синтаксической ошибке

2. ^I И ^A приведены только в иллюстративных целях и на самом деле не являются тем, что вы бы вводили.

3. Вы также можете попробовать system('move', '/y', 'c:techprogsazzz.azz', 'c:techprogsautorun.bat') с system вызовом, имеющим отдельные аргументы, но, честно говоря, использование FileUtils лучше по множеству причин.

4. тогда что ruby отправляет в cmd, что выдает эту синтаксическую ошибку?

5. Вместо этого попробуйте с echo , чтобы увидеть.


Автор:

Louise Ward


Дата создания:

5 Февраль 2021


Дата обновления:

7 Июнь 2023


Курс по React JS. #2 Авторизация пользователя. Цепочка Promises. Async await. Обработка ошибок

Видео: Курс по React JS. #2 Авторизация пользователя. Цепочка Promises. Async await. Обработка ошибок

Содержание

  • Копирование файла с пробелом
  • Перемещение файла с пробелом в имени файла
  • Переименование файла с пробелом в имени файла

В командной строке Windows при попытке скопировать, переместить или переименовать файл или каталог с пробелом вы можете получить сообщение «Неверный синтаксис команды». сообщение об ошибке. Это сообщение об ошибке генерируется, когда командная строка Windows не понимает синтаксис команды, поскольку он не отформатирован должным образом. Чтобы решить эту проблему, заключите в кавычки любое имя файла или имя каталога пробелами.

Например, если бы у нас был каталог или имя файла под названием «компьютерная надежда», вы должны ввести следующие команды.

Копирование файла с пробелом

В этом первом примере мы копируем файл «computer hope.txt» в каталог Hope. Если файл не заключен в кавычки, вы получите сообщение «Неверный синтаксис команды». сообщение об ошибке.

скопируйте «компьютер надежда.txt» надежда

Перемещение файла с пробелом в имени файла

Затем следующая команда переместит файл «computer hope.txt» в каталог Hope. Опять же, без кавычек вы получите сообщение об ошибке.

переместить «компьютер надежда.txt» надежда

Переименование файла с пробелом в имени файла

Наконец, следующая команда переименует тот же файл в пример file.txt, который также имеет пробел в имени файла.

переименуйте «компьютер» hope.txt «в» example file.txt »

Возможно, вам также будет интересно:

  • Move or die ошибка 0xc000007b
  • Move or die ошибка 0xc000005
  • Mount and blade prophesy of pendor ошибка
  • Mount and blade custom settlements ошибка
  • Mount and blade 2 ошибка the application faced

  • Понравилась статья? Поделить с друзьями:
    0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии