批处理,文件复制和拖放错误

时间:2012-11-21 19:32:19

标签: batch-file drag-and-drop copy-paste

我一直在四处寻找这个问题的答案,我找到的任何东西都无法解决我的问题 - 抱歉,如果已经有一个类似于我找不到的回答帖子,那就很抱歉。

第1章)
我有一个批处理文件,应该将任何文件/文件夹(递归地)复制到我的USB闪存驱动器中的特定文件夹。所以,我写了这个:

echo Copying files...
xcopy /s /i %1 \folder\Subfolder\%1

如果我从命令行调用批处理文件,结果会膨胀,但如果我将对象(文件/文件夹)拖到.bat本身上,它就会停止工作。我确定shell必须返回一条错误消息,但我无法读取它,因为命令行窗口会像往常一样立即关闭(这就是我从命令行运行它的原因)。

你能帮我解决这个问题吗?

第2章)
我希望批处理文件能够区分两种情况:
a)将文件“C:\ Document.doc”复制到“\ folder \ Subfolder”
b)将文件“C:\ SomeFolder”复制到\ folder \ Subfolder \ SomeFolder“

我的代码已经b),它只是没有区别于a),当我尝试复制单个文件时,它的作用是: 指令

xcopy /s /i %1 \Folder\SubFolder\%1

变为

xcopy /s /i C:\Document.doc \Folder\SubFolder\C:\Document.doc

而不是

xcopy /s /i C:\Document.doc \Folder\SubFolder\Document.doc

如何使批处理能够纠正此问题?

提前致谢!

1 个答案:

答案 0 :(得分:1)

%1具有文件的绝对路径,因此当您拖动文件时,您告诉CMD执行此操作:

xcopy  /S /i "C:\complete path of file\file.ext" "\folder\Subfolder\C:\complete path of file\file.ext"

你需要使用参数参数来获得所需的东西(绝对路径,文件名,扩展名,文件大小,你想要的东西)

像这样:

xcopy /s /i "%~1" "\folder\Subfolder\%~nx1"

示例确实:

xcopy  /S /i "C:\complete path of file\file.ext" "\folder\Subfolder\filename.ext"

但实际上你不需要使用第二个参数,你可以简化为:

xcopy /s /i "%~1" "\folder\Subfolder\"

因为默认情况下命运文件名与原始文件的名称相同。