XCOPY仍在询问(F =文件,D =目录)确认

您所在的位置:网站首页 dos更新bios为什么显示无效目录文件 XCOPY仍在询问(F =文件,D =目录)确认

XCOPY仍在询问(F =文件,D =目录)确认

2024-07-06 08:05| 来源: 网络整理| 查看: 265

即使我在脚本中添加了/F,我的批处理脚本xcopy仍在询问F = file, D = directory确认,日志显示如下。 请帮助如何避免询问确认。

脚本:

12345678net use p: /delete   net use p:"\\200clan\F_Drive" /USER:adm /PERSISTENT:NO-1111 set source=%1 set target=p:/%2 echo %source% %target% xcopy /S /I /Q /Y /F"%source%""%target%"

日志:

1234C:\test\foldera>xcopy /S /I /Q /Y /F"C:/test/folder1/folder2/logs/154/compareReport_177.html""p:/Services/WSDLCompare/177_20151116/compareReport_177.html" Does P:\Services\WSDLCompare\177_20151116\UIReport_177.html specify a file name or directory name on the target (F = file, D = directory)? 相关讨论 如果您不费心地浏览xcopy的所有详细信息和选项,请在目标路径%target\%的末尾添加反斜杠

/I开关(不是您在问题中提到的/F),防止xcopy仅在给出多个源文件的情况下才询问目标是文件还是目录,因此如果源是目录,或者使用通配符?或*。如果目标已经存在,则不会出现这样的提示。

有以下几种情况(取决于提供的%source%和%target%值):

单个源文件,目标是文件:

/I开关是无用的,因此您需要将F用管道传输到xcopy命令行中:

1echo F|xcopy /S /Q /Y /F"%source%""%target%"

如果已提供/Y开关(以强制覆盖),则还可以预先创建目标文件(空文件):

12>>"%target%" rem/ xcopy /S /Q /Y /F"%source%""%target%"

单个源文件,目标是目录:

/I开关也没有用;您可以将D用管道传输到xcopy命令行中:

1echo D|xcopy /S /Q /Y /F"%source%""%target%"

或者您可以简单地将\附加到目标:

1xcopy /S /Q /Y /F"%source%""%target%"

尽管在%target%指定诸如D:之类的驱动器的当前目录时会引起麻烦,因为D:表示该驱动器的当前目录,而D:\表示该驱动器的根目录;

或者您预先创建目标目录:

122> nul mkdir"%target%" xcopy /S /Q /Y /F"%source%""%target%"

如果目录已经存在,2> nul部分将禁止显示错误消息;

多个源文件,目标是一个文件:

这通常是没有意义的情况,因为您告诉xcopy将每个源文件复制到相同的目标文件,从而尝试覆盖它。

多个源文件,目标是目录:

/I开关在这里有意义:

1xcopy /S /I /Q /Y /F"%source%""%target%"

管道选项在这里也可以使用:

1echo D|xcopy /S /Q /Y /F"%source%""%target%"

将\附加到目的地也是如此(关于上述限制):

1xcopy /S /Q /Y /F"%source%""%target%"

或者您预先创建目标目录:

122> nul mkdir"%target%" xcopy /S /Q /Y /F"%source%""%target%"

结论

最灵活和安全的解决方案是将所需的选择(F或D)通过管道传送到xcopy命令行中。 (请注意,查询是与语言环境相关的。)

补充

我想在您的代码片段中提到一些小问题:

通常应该使用\作为路径分隔符,因为这是Windows标准字符(尽管/在大多数情况下也可以使用); 第二个net use命令行附加了-1111;如果它构成了资源的密码,则应将其移至/USER选项之前;否则只需将其删除; 您的set命令行会引入一些特殊字符(例如&,^,(,))的问题;为了避免这种情况,请声明set"source=%~1"和set"target=p:/%~2"; ~从参数中除去""周围的可能(如果它们包含SPACE,,,;,=,则是必需的);

这是修改了上述所有内容的代码:

123456789101112131415net use P: /DELETE rem supposing `-1111` constitutes the password for the resource: net use P:"\\200clan\F_Drive" -1111 /USER:adm /PERSISTENT:NO set"source=%~1" set"target=P:\%~2" echo"%source%""%target%" rem supposing the destination is a directory: echo D|xcopy /S /I /Q /Y /F"%source%""%target%" rem actually you do not need any interim variables: REM echo D|xcopy /S /I /Q /Y /F"%~1""P:\%~2" 相关讨论 很好的答案。我只想添加文件的F和目录的D只是英语Windows上的正确字符。例如,在德语Windows上,D用于文件(德语:Datei),而V用于目录(德语:Verzeichnis)。如果需要使用OS语言独立的解决方案来复制不能使用copy复制的xcopy单个文件,请在BATCH文件的此答案上查看批处理代码,以获取文件或文件夹。

在目标文件后面加一个*。这样可以消除问题,并且默认为"文件"。

123Xcopy file1 file2* Xcopy file1 file2\

默认为文件夹。

相关讨论 我一直认为这是一个建议,在测试之后我不得不说,它不像广告中所说的那样起作用。通配符(*)仍然是通配符,因此它将尝试匹配以file2开头的任何内容(使用上面的相同示例)。我建议改用管道方法,这很愚蠢,但是可以。我希望有一个开关只是说"它总是一个文件"或"它总是一个目录"。

xcopy不知道目标是目录。您可以在末尾加反斜杠来阐明这一点:

1xcopy /S /I /Q /Y /F"%source%""%target%" 相关讨论 即使从技术上来说这不是原始帖子的正确答案,这也帮助了我。示例目标变量包括完整路径和文件名,因此在末尾添加反斜杠只会混淆原始海报。如果source是单个文件,而target是文件夹(在我的情况下),则将反斜杠添加到目标并使用i开关使"文件/目录"问题消失,目录为然后正确推定。

当使用XCOPY复制单个文件时,没有选项表明目标是文件名还是目录(文件名默认为源文件的文件名)。 在这种情况下,XCOPY将提示一个(特定于语言环境的)消息,例如:

C:> xcopy foo.txt bar.txt

它提示 foo.txt是否在目标上指定文件名或目录名(F =文件,D =目录)?

在目标末尾添加通配符(*)将取消显示此提示,默认情况下将其复制为文件:

C:> xcopy foo.txt bar.txt * 1个文件已复制

这要求源文件扩展名和目标文件扩展名的长度相同,通常为3个字符。

有关更多信息:https://ss64.com/nt/xcopy.html

尝试:

12echo F>xcopy_answer.tmp xcopy xcopy /Q/Y"%source%""%target%"


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3