我一直在努力让下面的(示例)批处理文件在Windows XP SP3上工作。IF NOT EXIST部分似乎可以工作,但是尽管在XCOPY上使用了/I标志,我仍然收到"Does <path\filename.ext> specify a file name or directory name on the target"消息
@IF NOT EXIST "\\SERVER\PATH\TO\FILE DIR" (
MKDIR "\\SERVER\PATH\TO\FILE DIR"
XCOPY "\\SERVER\PATH\TO\ORIG FILE\FILE TEMP.XLSM" "\\SERVER\PATH\TO\FILE DIR\FILE FINAL.XLSM" /I
) ELSE (
XCOPY "\\SERVER\PATH\TO\ORIG FILE\FILE TEMP.XLSM" "\\SERVER\PATH\TO\FILE DIR\FILE FINAL.XLSM" /I
)我的理解是,使用/I开关时,如果目录结构不存在,XCOPY应该创建它-至少在我没有指定文件名的情况下它是这样做的。不幸的是,对于这个项目的要求,我必须指定一个文件名,不能保留原始文件,因为它是一个模板文件,每天都会自动处理。
因此,我试图通过检查路径是否存在来解决XCOPY和目录路径不存在的问题,如果路径不存在,则使用MKDIR命令创建它,然后复制文件-但XCOPY仍然会提示目标是文件还是目录,这没有意义,但可能我遗漏了什么。
为了清楚起见,这是在Windows XP SP3上。
有什么想法吗?
发布于 2013-05-01 04:09:25
您可能会发现这样做更容易:
md "\\SERVER\PATH\TO\FILE DIR" 2>NUL
copy "\\SERVER\PATH\TO\ORIG FILE\FILE TEMP.XLSM" "\\SERVER\PATH\TO\FILE DIR\FILE FINAL.XLSM"初始'md‘将尝试创建目录。如果它已经存在,它将向STDERR输出一条错误消息。2>NUL将其重定向到Windows的内置“空设备”,也就是说,它只是吞下了错误消息。假设您具有适当的权限,则可以确保此目录现在存在。
copy命令只复制您的文件。不需要使用xcopy来复制单个文件-这既有点过分,也会出现一些小问题,比如提示它是文件还是目录。
发布于 2013-05-01 04:11:14
由于目标文件在复制之前并不存在,因此xcopy不确定是否需要创建一个名为“文件FINAL.XLSM”的新目录,并将文件放入其中。顺便说一句,因为您已经创建了目标目录,所以不需要在xcopy上使用/I。这里有几种方法可以做你想做的事情:
发布于 2013-05-01 05:10:17
echo f|XCOPY "\\SERVER\PATH\TO\ORIG FILE\FILE TEMP.XLSM" "\\SERVER\PATH\TO\FILE DIR\FILE FINAL.XLSM"应该复制文件并创建目录。不知道为什么指定“这是一个文件”的选项不可用,但是RTFM - /i开关只有在你复制多个文件时才有效,并且指定\作为目标名称的最后一个字符告诉XCOPY目标在任何情况下都是目录名,所以/i看起来是多余的。
但是,如果您遵循copy路线,请务必小心。一般来说,最好使用copy /b,因为普通的copy可能无法正确复制某些文件类型(如.MPGs) -它可能会在第一个^Z停止。然而,copy /b似乎是安全的。
https://stackoverflow.com/questions/16307897
复制相似问题