如何使用环境变量复制和重命名文件?
Posted
技术标签:
【中文标题】如何使用环境变量复制和重命名文件?【英文标题】:How can I copy and rename a file using an environment variable? 【发布时间】:2020-01-23 21:23:09 【问题描述】:我几乎是第一次使用命令提示符,需要创建一个批处理文件,提示用户输入带有扩展名的文件名。蝙蝠应该能够复制和重命名所述文件。讲师已指示我们使用环境变量来完成此任务,但我不断收到目录或语法错误。
我已经尝试使用用户在之前的提示中设置的变量,但不幸的是,这位特定的讲师没有给我们提供有关如何实现这一特定目标的实际示例,所以我很沮丧。我尝试使用文件的通用名称将变量附加到目标目录。文件和副本应该在 dame 目录中。
set /P file_var=Please enter a file name and extension:
copy %file_var% Templatecopy.doc
该文件应以新的默认名称“Templatecopy.doc”复制到目标目录中。
产生语法和目录错误。
【问题讨论】:
我猜,文件名包含空格(否则你的代码可以工作 - 它在语法上是正确的)只要文件名或路径中有空格,你必须引用它们以将它们标记为一个实体(更好地使用总是引用它们):`copy "%file_var%" "Template copy.doc" 如果没有输入,是否要将文件复制到默认目标或将其从输入复制到Templatecopy.doc
?
【参考方案1】:
我建议使用以下注释代码来使此批处理文件安全,如How to stop Windows command interpreter from quitting batch file execution on an incorrect user input? 上的回答中所述
@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 /?
【讨论】:
以上是关于如何使用环境变量复制和重命名文件?的主要内容,如果未能解决你的问题,请参考以下文章