ChatGPT解决这个技术问题 Extra ChatGPT

批处理文件将文件从一个文件夹复制到另一个文件夹

我在网络上有一个存储文件夹,所有用户都将在其中将他们的活动数据存储在服务器上。由于位置问题,现在该服务器将被新服务器替换,因此我需要将子文件夹文件从旧服务器存储文件夹复制到新服务器存储文件夹。我有以下前:

\Oldeserver\storage\data & files\New server\storage\data & files

我假设您在谈论Windows环境?
@HugoM.Zuleta,我知道 .bat 文件。但“批处理文件”并不一定能保证 Windows 环境。术语的使用早于 Windows(如 .bat 文件),我什至看到新手在 *nix 环境中使用该术语来表示“shell 脚本”。
@pluma 我同意,这主要是因为它们指的是由其操作系统的脚本工具完成的批处理操作。

l
lavinio

xcopy.exe 绝对是你的朋友。它内置在 Windows 中,因此成本不高。

只需xcopy /s c:\source d:\target

你可能想要调整一些东西;我们还添加的一些选项包括:

/s/e - 递归复制,包括复制空目录。

/v - 添加此项以验证副本与原件的对比。较慢,但对于偏执狂。

/h - 复制系统和隐藏文件。

/k - 将只读属性与文件一起复制。否则,所有文件都变为可读写。

/x - 如果你关心权限,你可能想要 /o 或 /x。

/y - 在覆盖现有文件之前不提示。

/z - 如果您认为复制可能失败并且想要重新启动它,请使用它。它在每个文件复制时都会在每个文件上放置一个标记,因此您可以重新运行 xcopy 命令以从它停止的地方继续。

如果您认为 xcopy 可能会在中途失败(例如当您通过不稳定的网络连接进行复制时),或者您必须停止它并希望稍后继续,您可以使用 xcopy /s/z c:\source d:\target

希望这可以帮助。


@Iavino 复制档案时询问文件或目录。有没有办法抑制它?
嗨@mini-me - 我发现如果它是一个目录,你可以指定一个尾随的“/”字符,你不会看到那个消息。
/i - 如果目标不存在并且复制多个文件,则假定目标必须是一个目录。
如何从目录中复制单个文件?
要绕过“文件或目录”提示,请执行以下命令... echo f | xcopy /s /f srcfile destfile
E
Etienne Dupuis

我最喜欢的备份数据是:

ROBOCOPY "C:\folder" "C:\new_folder" /mir

/mir 用于镜像。您还可以使用 /mov 移动文件。它重现了完全相同的文件夹。它可以根据需要删除/覆盖文件。对我很有用。它比 xcopy / copy 快得多。它也内置在 Windows 中。

来源:http://technet.microsoft.com/en-us/library/cc733145.aspx


我支持这一点。它真的很快。比 xcopy 快得多
有没有办法像这样递归删除 thumbs.db?
正是我要找的东西。完全从源复制所有子文件夹和文件。
M
Morgan

为了清楚起见,当您使用 xcopy /s c:\source d:\target 时,请在 c:\source 和 d:\target 周围加上“”,否则会出错。

即,如果路径中有空格,即如果你有:

"C:\Some Folder\*.txt"

但如果您有以下情况则不需要:

C:\SomeFolder\*.txt

引号起到了作用;)谢谢我还使用 /Y 替换文件(如果存在) :) 示例:´´´xcopy /s "c:\source" "d:\target" /Y```
d
djvg

您可能想看看 XCopyRoboCopy,它们是适用于 Windows 上几乎所有文件复制操作的非常全面的解决方案。


RoboCopy 似乎比 XCopy 更好,因为 xcopy 要求文件或文件夹决策。我不能拒绝它。它必须能够全自动工作。
@mini-me 我知道这已经很晚了,但是我找不到相同的相关开关。我最终求助于让它创建一个与我复制到的名称相同的空白文件,然后覆盖它。如果文件已经存在,那么它不会打扰询问它是文件还是目录。 (如果你想要自动目录,那么你可以在路径中附加一个'/',它会这样做)。希望这对未来的人有所帮助!
@Eve 作为参考,echo f | xcopy source destination /y 将使其自动运行。它为所有问题分配一个“f”作为响应。它还将传递覆盖请求(我认为 f 被视为是)。
C
Community

要绕过“在目标上指定文件名或目录名(F = 文件,D = 目录)?”使用 xcopy 提示,您可以执行以下操作...

echo f | xcopy /f /y srcfile destfile

或者对于我们这些只是复制大型子结构/文件夹的人:

如果复制多个文件,则使用 /i 指定目标必须是一个目录


(回显“f”表示文件或“D”表示目录)
现在尝试执行此操作,但它无法正常工作-尝试将一个文件复制到另一个目录时,我总是会收到提示。如果这完全影响它,请使用 Win 10 echo f | xcopy /f /y "My.dll" "C:\myFolder\My.dll"。我已经尝试结合其他开关无济于事(和大写F)
D
Donald Duck

如果要复制文件不使用绝对路径,也就是相对路径:

不要忘记在路径中写反斜杠而不是斜杠

例子:

copy children-folder\file.something .\other-children-folder

PS:可以使用这些称为“批处理参数”的通配符检索绝对路径

@echo off
echo %%~dp0 is "%~dp0"
echo %%0 is "%0"
echo %%~dpnx0 is "%~dpnx0"
echo %%~f1 is "%~f1"
echo %%~dp0%%~1 is "%~dp0%~1"

在此处查看有关副本的文档:https://technet.microsoft.com/en-us/library/bb490886.aspx

以及这里的批处理参数文档:https://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/percent.mspx?mfr=true


我认为 \ 被称为反斜杠。
D
David Castro
@echo off

rem The * at the end of the destination file is to avoid File/Directory Internal Question.

rem You can do this for each especific file. (Make sure you already have permissions to the path)
xcopy /Y "\\Oldeserver\storage\data\MyFile01.txt" "\\New server\storage\data\MyFile01.txt"*
pause

rem You can use "copy" instead of "xcopy "for this example.

J
Joey

查看基于 rsync 的 Windows 工具 NASBackup。如果您熟悉 rsync 命令,这将是一个额外的好处。


n
npocmaka

您可以使用 esentutl 复制(主要是大)带有进度条的文件:

esentutl /y "my.file" /d "another.file" /o

进度条如下所示:

https://i.stack.imgur.com/urFDl.png


P
Panagiotis Bougioukos

如果您可以使用 Bash,您可以简单地使用以下带有递归选项的命令。

cp -r "C:\Users\sourceFolder\." "C:\Users\destinationFolder"

这将复制包含在 sourceFolder insde destincationFolder 下的所有文件和文件夹