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

时间:2010-11-26 07:36:50

标签: batch-file xcopy

我有一个简单的副本从脚本到我们的一个人丢失了距离我的办公桌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

9 个答案:

答案 0 :(得分:19)

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

为防止xcopy询问此问题,只需告诉他目标文件夹,因此没有歧义:

xcopy /s/y "J:\Old path\Shapes.atc" "C:\Documents and Settings\his name\Support"

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

copy /y "J:\Old path\Shapes.atc" "C:\Documents and Settings\his name\Support\Shapes-new.atc

答案 1 :(得分: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

答案 2 :(得分:10)

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

示例:

xcopy /Y "C:\file\from\here.txt" "C:\file\to\here\"

答案 3 :(得分:5)

引用XCopy Force File

对于强制文件,我们可以使用管道“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

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

答案 4 :(得分:3)

/ i开关可能是您的追随者。

来自xcopy /?

/ I如果目标不存在并复制多个文件,              假设目的地必须是目录。

答案 5 :(得分:2)

附加" *"可以在新扩展更短时使用。您需要使用空白填充新扩展名,这只能通过将目标文件名括在引号中来完成。例如:

xcopy foo.shtml "foo.html *"

这将在不提示的情况下复制和重命名。

"这不是一个错误,它是一个功能!" (我曾经在微软停车场看到一辆带有虚荣心板的大众甲壳虫" FEATURE"。)这些重命名语义一直追溯到我编写DOS v.1时。除非新名称中包含通配符(?或*),否则新名称中的字符将逐个替换旧名称中的字符。如果不将空白添加到新名称,则会从旧名称中复制剩余的字符。

答案 6 :(得分:0)

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\*.*"

..应该这样做。

好主意:

IF NOT EXIST "C:\Documents and Settings\His name\Application Data\Autodesk\AutoCAD 2010\R18.0\enu\Support\Shapes.atc" ECHO/ && ECHO/ && ECHO * * * * * COPY FAILED - Call JustME at 555-555-1212 && ECHO/ && pause

(假设您已将先前版本重命名为.old)

XCOPY  /Z  <----- restartable mode - good for large files.

答案 7 :(得分:0)

虚拟主要提示

假设您有源文件和目标文件

%SRC_FILENAME% and %DST_FILENAME%

你可以使用两步法:

@REM on my win 7 system mkdir creates all parent directories also
mkdir "%DST_FILENAME%\.."
xcopy "%SRC_FILENAME% "%DST_FILENAME%\.."

这将解决为例如

mkdir "c:\destination\b\c\file.txt\.."
@REM The special trick here is that mkdir can create the parent
@REM directory of a "virtual" directory (c:\destination\b\c\file.txt\) that 
@REM doesn't even need to exist.
@REM So the directory "c:\destination\b\c" is created here.
@REM mkdir "c:\destination\b\c\dummystring\.." would have the same effect

xcopy "c:\source\b\c\file.txt" "c:\destination\b\c\file.txt\.."
@REM xcopy computes the real location of  "c:\destination\b\c\file.txt\.."
@REM which is the now existing directory "c:\destination\b\c"
@REM (the parent directory of the "virtual" directory c:\destination\b\c\file.txt\).

当我在构建过程中生成的命令行中偶然发现一些非常狂野的../..-构造时,我想到了这个想法。

答案 8 :(得分:0)

我遇到了完全相同的问题,想要将文件复制到外部硬盘驱动器以进行备份。 如果我想复制一个完整的文件夹,那么COPY非常乐意创建目标文件夹并用所有文件填充它。 但是,我想每天复制一次文件并将今天的日期添加到文件中。 COPY很高兴复制文件并以新格式重命名,但只有目标文件夹已经存在。

我的复制命令看起来像这样:

COPY C:\ SRCFOLDER \ MYFILE.doc D:\ DESTFOLDER \ MYFILE_YYYYMMDD.doc

和你一样,我四处寻找替代开关或其他复制类型命令,但没有任何真正有效的方式。 然后我想通过简单地在复制命令之前添加make目录(MD或MKDIR)命令来分割出两个不同的要求。

所以现在我有了

MKDIR D:\ DESTFOLDER

COPY C:\ SRCFOLDER \ MYFILE.doc D:\ DESTFOLDER \ MYFILE_YYYYMMDD.doc

如果目标文件夹不存在,则会创建它。 如果目标文件夹存在,则会生成错误消息。但是,这不会使批处理文件停止继续执行复制命令。

错误消息说: 子目录或文件D:\ DESTFOLDER已存在

正如我所说,错误消息并不能阻止批处理文件的运行,这是解决问题的一个非常简单的方法。

希望这会有所帮助。