gpt4 book ai didi

windows - XCOPY 仍要求(F = 文件,D = 目录)确认

转载 作者:行者123 更新时间:2023-12-02 22:17:45 25 4
gpt4 key购买 nike

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

脚本:

net 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%"

日志:

C:\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)?

最佳答案

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

有以下场景(取决于提供的%source%%target%值):

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

    /I 开关没有用,因此您需要将 F 通过管道输入 xcopy 命令行:

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

    如果给出了/Y开关(强制覆盖),您也可以提前创建目标文件(空文件):

    >> "%target%" rem/
    xcopy /S /Q /Y /F "%source%" "%target%"
  • 单个源文件,目标是目录:

    /I 开关也没什么用;您可以将 D 通过管道传输到 xcopy 命令行:

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

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

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

    尽管当 %target% 指定驱动器的当前目录(例如 D:)时,这会引起麻烦,因为 D: 表示该驱动器的当前目录,而 D:\ 表示其根目录;

    或者您提前创建目标目录:

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

    2> nul 部分会在目录已存在的情况下抑制错误消息;

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

    这通常是一种毫无意义的情况,因为您告诉xcopy将每个源文件复制到同一个目标文件,从而尝试覆盖它;

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

    /I 开关在这里有意义:

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

    管道选项在这里也适用:

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

    \ 附加到目标也是如此(考虑到上述限制):

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

    或者您提前创建目标目录:

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

结论

最灵活、最安全的解决方案是将所需的选择(FD)通过管道传输到 xcopy 命令行中。 (请注意,查询取决于区域设置。)

<小时/>

补充

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

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

下面是对上述所有内容进行了修改的代码:

net 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"

关于windows - XCOPY 仍要求(F = 文件,D = 目录)确认,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33752732/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com