![xcopy 不抑制文件/目录查询](https://linux22.com/image/1214371/xcopy%20%E4%B8%8D%E6%8A%91%E5%88%B6%E6%96%87%E4%BB%B6%2F%E7%9B%AE%E5%BD%95%E6%9F%A5%E8%AF%A2.png)
我正在尝试使用 xcopy 将文件从一台机器复制到网络上的另一台机器,这是 Java 程序的一部分。我像这样调用 xcopy:
xcopy "C:\Program Files\path\to\my\file" "\\othermachine\c$\Documents and Settings\<myUserName>\Desktop\Test\path\in\directory\structure\to\file" /e /y /i
因为我是在 Java 中用 with 调用它,所以我需要抑制所有提示。在大多数情况下,\i 和 \y 已经做到了这一点。但是,对于这个文件,/i 失败了,我得到了文件或目录提示。结果是它挂起了整个程序。
我还尝试使用 /s /t /q 调用它并将其附加到现有选项上,但无济于事。为什么 /i 无法抑制文件或目录提示?我需要按顺序调用选项吗?我还需要做其他事情吗?
编辑:我应该提一下,该文件是一个文本文件 - 单行文本。它没有扩展名。它看起来像这样:FILE-NAME
答案1
echo F
诀窍是:
echo F | xcopy "C:\Program Files\path\to\my\file" "\\othermachine\c$\Documents and Settings\<myUserName>\Desktop\Test\path\in\directory\structure\to\file" /e /y /i
请注意,字符在本地化版本中可能会有所不同(我的德语版本希望 D 代表文件(Datei)或 V 代表目录(Verzeichnis))
答案2
一个看似没有记录的技巧是把一个放在*
目标的末尾 - 然后 xcopy 将复制为一个文件,所以
xcopy c:\source\file.txt c:\destination\newfile.txt*
此echo f | xcopy ...
技巧在 Windows 的本地化版本上不起作用,因为提示符有所不同。
答案3
这Stackoverflow 上的话题没有标记的答案,但它可能会对你有所帮助(似乎是同一个问题)。
答案4
另一个可能的技巧是预先创建目标文件或文件夹。然后xcopy
就不会问,因为它已经知道了。我不会说这个解决方案比上面提到的更好,它只是不同而已,因此我希望它在这里也能用。
我自己的简单任务是将一些文件从网络文件夹复制到本地累积文件夹。
- AAAAA\Disk1.zip => AAAAA.zip
- BBBBB\Disk1.zip => BBBBB.zip
- 等等
原始命令(稍长的 .cmd 脚本文件中的一行)是
for /d /r %SRC% %%1 in (*.*) do xcopy /k /f /y %%1\Disk1.zip %~dp0%%~nx1.zip
然而,这也引发了很多这样的(F)ile-或(D)-目录第一次使用新文件(以前没有遇到过)时的问题。特别是当我填充一个新的空目标文件夹时。
然后echo F
Asterisk Hack 回答 - 它们也运行良好。
for /d /r %SRC% %%1 in (*.*) do echo f | xcopy /k /f /y %%1\Disk1.zip %~dp0%%~nx1.zip
for /d /r %SRC% %%1 in (*.*) do xcopy /k /f /y %%1\Disk1.zip %~dp0%%~nx1.zip*
现在,还有一个潜在的解决方案是在发出命令之前明确创建文件的目标文件夹xcopy
。
对于文件来说,例如:
echo. > C:\Temp\TargetPlace
xcopy Source C:\Temp\TargetPlace
遗憾的是,Windows 默认没有该touch
命令,而该命令对于创建虚拟的 0 字节文件非常有用。
对于文件夹来说,例如:
mkdir C:\Temp\TargetPlace
xcopy Source C:\Temp\TargetPlace
当然,在 CMD shell 脚本中需要两个命令 - 两行。您不能轻松地将多个命令放入 CMD for 循环中,但在这里您可以管道命令在一起(假设xcopy
在发出特定命令时实际上不会读取任何用户输入,这可能会在未来的 Windows 版本中发生变化,尽管不太可能)。
对于文件夹:
for /d /r %SRC% %%1 in (*.*) do md %~dp0%%~nx1.zip | xcopy /k /f /y %%1\Disk1.zip %~dp0%%~nx1.zip
对于文件:
for /d /r %SRC% %%1 in (*.*) do echo. >%~dp0%%~nx1.zip | xcopy /k /f /y %%1\Disk1.zip %~dp0%%~nx1.zip
echo.
最后一个命令在 - > ... |之间有两个输出重定向xcopy
。但至少在.cmd
Windows 8.1 的文件中它可以工作。