2

我一直在寻找这个问题的答案,但我发现的任何东西都无法真正解决我的问题 - 如果已经有一个与我没有找到的类似的已回答帖子,我很抱歉。

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

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

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

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

第 2 章)
我希望批处理文件能够区分两种情况:
a)将文件“C:\Document.doc”复制到“\folder\Subfolder”
b)复制文件“C:\SomeFolder”到\文件夹\子文件夹\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

我怎样才能使批次能够纠正这个问题?

提前致谢!

4

1 回答 1

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

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

于 2012-11-21T21:18:19.473 回答