BATCH文件要求提供文件或文件夹

jus*_* me 71 xcopy batch-file

我有一个简单的副本从脚本到我们的一个人丢失了距离我的桌子20公里的文件

在测试脚本时,如果我的文件shapes.atc是文件或文件夹,则会提示我

我可以告诉你它是一个文件,但我怎样才能将它自动复制到我的家伙需要只需点击完成的批处理

xcopy /s/y J:\"My Name"\"FILES IN TRANSIT"\JOHN20101126\"Missing file"\Shapes.atc C:\"Documents and Settings"\"His name"\"Application Data"\Autodesk\"AutoCAD 2010"\"R18.0"\enu\Support\Shapes.atc
Run Code Online (Sandbox Code Playgroud)

Gov*_*ert 173

一个看似无法记录的技巧是将目标放在*目的地的末尾 - 然后xcopy将其复制为文件,就像这样

xcopy c:\source\file.txt c:\destination\newfile.txt*
Run Code Online (Sandbox Code Playgroud)

这个echo f | xcopy ...技巧不适用于Windows的本地化版本,其提示不同.

  • 请注意使用*字符时可能存在问题.我尝试使用建议的提示使用单个命令复制和重命名文件.源文件名为`Android.mk.armeabi.debug`.目标名称是"Android.mk".生成的文件名是`Android.mkbug` (11认同)
  • 谢谢你!我实际上遇到了一个错误,_"无法扩展第二个文件名,以便首先匹配"_,只有6个谷歌点击(没有答案).花了一段时间,但我想出来了,它也解释了@ user1222021的观察.**源和目标扩展名的长度相同.**如果目标扩展名是_shorter_,_e.g._`.shtml`到`.html*`,目标将"获得"字母,就像放在顶部一样源扩展名,_e.g._`.htmll`.如果目标扩展名为_longer_,则会出现上述错误. (8认同)
  • 有没有办法永远复制为目录? (4认同)
  • 这种"中途停留"效应强烈暗示开发人员根据源扩展的长度分配了一个缓冲区,然后重用缓冲区来存储目标扩展的长度,而不会终止C字符串.据推测,开发人员假设没有人会改变被复制文件的扩展名,可能是因为_back then_(xcopy于1985年首次发布,虽然我确定它已被重写),但它并不像它现在(如果已知的话)使用备用扩展来指示文件的变体.当时人们只是使用了不同的_filenames_. (2认同)

Cha*_*esB 22

实际上xcopy不会询问您原始文件是否存在,但是如果您想将其放在名为Shapes.atc的新文件夹中,或者在文件夹Support中(这是您想要的).

为了防止xcopy问这个,只需告诉他目标文件夹,所以没有歧义:

xcopy /s/y "J:\Old path\Shapes.atc" "C:\Documents and Settings\his name\Support"
Run Code Online (Sandbox Code Playgroud)

如果要更改目标中的文件名,只需使用copy(复制文件时比xcopy更适应):

copy /y "J:\Old path\Shapes.atc" "C:\Documents and Settings\his name\Support\Shapes-new.atc
Run Code Online (Sandbox Code Playgroud)

  • 但是,`copy`当然不会创建路径,如果它不存在的话. (11认同)
  • +1 为 `copy` 而不是 `xcopy` 建议:) (2认同)
  • 如果将目标指定为目录,则可以添加尾部反斜杠 - 这可以防止在目录不存在时出现问题。(文件名保持不变) (2认同)

Den*_*vin 11

echo f | xcopy /s/y J:\"My Name"\"FILES IN TRANSIT"\JOHN20101126\"Missing file"\Shapes.atc C:\"Documents and Settings"\"His name"\"Application Data"\Autodesk\"AutoCAD 2010"\"R18.0"\enu\Support\Shapes.atc
Run Code Online (Sandbox Code Playgroud)

  • 此解决方案可能不适用于某些Windows本地化.或者,您可以将星号附加到目标文件名,xcopy不会询问任何内容.这里有更多细节:http://stackoverflow.com/a/14022309/532647. (2认同)

小智 11

真正的诀窍是:在目标路径末尾使用反斜杠来复制文件.如果您不想要警告,/ Y用于覆盖现有文件.

例:

xcopy /Y "C:\file\from\here.txt" "C:\file\to\here\"
Run Code Online (Sandbox Code Playgroud)


Sha*_* Lu 5

引用XCopy强制文件

对于强制文件,我们可以使用管道"echo F |" :

C:\Trash>xcopy 23.txt 24.txt
Does 24.txt specify a file name
or directory name on the target
(F = file, D = directory)?

C:\Trash>echo F | xcopy 23.txt 24.txt
Does 24.txt specify a file name
or directory name on the target
(F = file, D = directory)? F
C:23.txt
1 File(s) copied
Run Code Online (Sandbox Code Playgroud)

为了强制文件夹,我们可以使用/ i参数进行xcopy或使用目标文件夹末尾的反斜杠().