Надо переместить файлы 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
Содержание
- Копирование файла с пробелом
- Перемещение файла с пробелом в имени файла
- Переименование файла с пробелом в имени файла
В командной строке Windows при попытке скопировать, переместить или переименовать файл или каталог с пробелом вы можете получить сообщение «Неверный синтаксис команды». сообщение об ошибке. Это сообщение об ошибке генерируется, когда командная строка Windows не понимает синтаксис команды, поскольку он не отформатирован должным образом. Чтобы решить эту проблему, заключите в кавычки любое имя файла или имя каталога пробелами.
Например, если бы у нас был каталог или имя файла под названием «компьютерная надежда», вы должны ввести следующие команды.
Копирование файла с пробелом
В этом первом примере мы копируем файл «computer hope.txt» в каталог Hope. Если файл не заключен в кавычки, вы получите сообщение «Неверный синтаксис команды». сообщение об ошибке.
скопируйте «компьютер надежда.txt» надежда
Перемещение файла с пробелом в имени файла
Затем следующая команда переместит файл «computer hope.txt» в каталог Hope. Опять же, без кавычек вы получите сообщение об ошибке.
переместить «компьютер надежда.txt» надежда
Переименование файла с пробелом в имени файла
Наконец, следующая команда переименует тот же файл в пример file.txt, который также имеет пробел в имени файла.
переименуйте «компьютер» hope.txt «в» example file.txt »