windows 环境下使用 copy 命令的坑

3,681 阅读2分钟

众多周知,一般来说,想要把一个文件夹复制到另一个目录下,都是使用 ctrl + c ,ctrl + v,但是,如果要在 package.json 中在 scripts 命令中加入拷贝文件的命令,就需要使用到命令行来进行复制

  • 在 linux、mac 环境下使用 cp 命令
  • 但是在 windows 环境下,是不支持的,需要使用 copy 或者 xcopy 命令来作为代替。
copy sourceFile destinationFile

//示例
copy c:\data\file1.doc D:\backup\file2.doc

但是这种方式只能用于拷贝单个文件,如果需要拷贝整个文件夹呢?

根据文档:www.windows-commandline.com/xcopy-comma… 提示,使用 Xcopy 来进行拷贝

Xcopy  /S /I /E Source_Directory  Destination_directory

//示例
Xcopy /S /I /E D:\data\documents E:\Newfolder\documents

但是,实测,在 package.json 文件中使用该命令,会提示:

于是搜索该报错信息,但是搜索到的基本都是在文件前后加上 "" 即可解决问题,但是实测不行

于是改用 copy 命令

copy D:\practice\react-ts-demo-1\build D:\practice\node-demo-1\build\

但是,要注意的是,copy 命令检索到目标文件夹没有 build 目录,是不会自动创建目录的,需要手动通过 mkdir 来新增该文件,成功解决。

mkdir build && copy D:\practice\react-ts-demo-1\build D:\practice\node-demo-1\build\

但是,这样会引发一个新的问题:如果 build 目录下有子目录呢?这样做,只会复制build目录下的文件,并不会复制下面的子目录

在经过一番尝试后,发现文档: www.windows-commandline.com/xcopy-comma… 中的内容与实际运用有些许的差异,导致了,使用失败

  • 正确使用方法:
Xcopy D:\practice\react-ts-demo-1\build\ D:\practice\node-demo-1\build\ /S /I /E

/S :复制目录和子目录,不包括空目录。
/I :如果目标不存在,且要复制多个文件,则假定目标必须是目录。
/E :复制目录和子目录,包括空目录。

这样即可把来源文件夹下的所有内容都复制到目标文件夹中。