使用 %1 进行拖放的批处理文件复制

Posted

技术标签:

【中文标题】使用 %1 进行拖放的批处理文件复制【英文标题】:Batch file Copy using %1 for drag and drop 【发布时间】:2013-01-25 01:09:45 【问题描述】:

我尝试制作一个拖放批处理文件。

我有一个文件存在但批处理文件找不到它的问题...

我想将.png 文件(如pict_2013020808172137243.png)复制到另一个文件夹并重命名。

路径中有_和空格之类的符号,我也不知道如何进行多次拖放以实现相同的功能(重命名并添加到.zip)。

我试过了,但没有结果:(

@ECHO OFF
ECHO %1
COPY "%1" "%CD%\test\" /Y /S 
REN "%CD%\mob\*.png" "%CD%\test\test.png"
7za u -tzip "%appdata%\.virto\pack.zip" "test" -r

【问题讨论】:

【参考方案1】:

批处理文件的拖放操作很糟糕。 如果存在空格,则会引用名称,但如果找到特殊字符,则不会引用,例如 &,;^

对于仅文件名中的空格,您只需稍微更改代码。

@ECHO OFF
ECHO "%~1"
COPY "%~1" "%CD%\test\" /Y /S 
MOVE "%CD%\mob\*.png" "%CD%\test\test.png"
7za u -tzip "%appdata%\.virto\pack.zip" "test" -r

%~1 始终扩展为未引用的版本,因此始终可以以安全的方式引用它们。

"c:\Docs and sets" -> %~1 -> c:\Docs and sets -> "%~1" -> "c:\Docs and sets"
c:\Programs -> %~1 -> c:\Programs -> "%~1" -> "c:\Programs"

更多详情请阅读Drag and drop batch file for multiple files?

【讨论】:

谢谢!这对我有很大帮助:) Drag & drop is badly implemented for batch files. -- 我以前读过这个并记住了它,所以我能够找到你的答案。该声明是否同样适用于.bat.cmd?我的意思是如果它是explorer issue,为什么它只是批处理脚本的问题? 我检查了它与.vbs 脚本和.exe 文件一起正常工作(当然.cmd 失败)。确实令人困惑,探索者似乎足够聪明但有时“不愿意”。在您看来,问为什么有意义吗? @Wolf 那是因为只有 cmd.exe 会尝试解释 & 字符。 .exe 和 .vbs 不会尝试解释参数 @Wolf 是的,对于资源管理器来说,它们只是文件,但 cmd.exe 将带有 & 的文件解释为命令分隔符。并且资源管理器不知道它应该将这些文件名也用引号括起来。这是浏览器的糟糕设计

以上是关于使用 %1 进行拖放的批处理文件复制的主要内容,如果未能解决你的问题,请参考以下文章

NSStatusBar 使用菜单拖放

在批处理文件中使用 CLIP 命令

拖放的角度问题

如何在不实际拖放的情况下使用 jQuery UI Droppable 触发 Drop 事件?

一个轻量级且非常可配置的jQuery插件,用于使用ajax(同步)上传文件;包括对队列、进度跟踪和拖放的支持。

HTML 5 拖放相对于 jQuery UI 拖放的优势