我一直在四处寻找这个问题的答案,我找到的任何东西都无法解决我的问题 - 抱歉,如果已经有一个类似于我找不到的回答帖子,那就很抱歉。
第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
如何使批处理能够纠正此问题?
提前致谢!
答案 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\"
因为默认情况下命运文件名与原始文件的名称相同。