Как я могу скопировать и переименовать файл, используя переменную окружения? - PullRequest
1 голос
/ 23 сентября 2019

Я работаю с командной строкой почти впервые, и мне нужно создать командный файл, который запрашивает у пользователя имя файла с расширением.Предполагается, что летучая мышь сможет копировать и переименовывать указанный файл.Инструктор поручил нам использовать переменные среды для выполнения этой задачи, но я продолжаю получать ошибки каталога или синтаксиса.

Я пытался использовать переменную, которую пользователь устанавливает в предыдущем приглашении, но, к сожалению, этот конкретный инструкторне дал нам практических примеров о том, как достичь этой конкретной цели, так что я колеблюсь.Я попытался прикрепить переменную к целевому каталогу с общим именем для файла.Файл и копия должны находиться в каталоге dame.

set /P file_var=Please enter a file name and extension: 
copy %file_var% Templatecopy.doc

Файл должен быть скопирован с новым именем по умолчанию «Templatecopy.doc» в целевом каталоге.

Производитошибки синтаксиса и каталога.

1 Ответ

0 голосов
/ 24 сентября 2019

Я предлагаю следующий закомментированный код, чтобы сделать этот пакетный файл отказоустойчивым, как описано в ответе на Как остановить интерпретатор команд Windows от выхода из выполнения пакетного файла при неправильном вводе пользователем?

@echo off
:FileNamePrompt
rem Undefine environment variable FileToCopy.
set "FileToCopy="
rem Prompt user for the file name.
set /P "FileToCopy=Please enter a file name and extension: "
rem Has the user not entered anything, prompt the user once more.
if not defined FileToCopy goto FileNamePrompt
rem Remove all double quotes from user input string.
set "FileToCopy=%FileToCopy:"=%"
rem Has the user input just one or more ", prompt the user once more.
if not defined FileToCopy goto FileNamePrompt
rem Check if the user input string really references an existing file.
if not exist "%FileToCopy%" (
    echo File "%FileToCopy%" does not exist.
    goto FileNamePrompt
)
rem Check if the user input string really references
rem an existing file and not an existing directory.
if exist "%FileToCopy%\" (
    echo "%FileToCopy%" references a directory.
    goto FileNamePrompt
)
copy /B /Y "%FileToCopy%" "%~dp0Templatecopy.doc" >nul

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

  • call /? ... объясняет %~dp0, который расширяется до диска и путь аргумента 0, который является путем к пакетному файлу, всегда заканчивающемуся обратной косой чертой.
  • copy /?
  • echo /?
  • goto /?
  • if /?
  • rem /?
  • set /?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...