XCOPY仍在询问(F =文件,D =目录)确认 |
您所在的位置:网站首页 › dos更新bios为什么显示无效目录文件 › XCOPY仍在询问(F =文件,D =目录)确认 |
即使我在脚本中添加了/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 |