使用 %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 进行拖放的批处理文件复制的主要内容,如果未能解决你的问题,请参考以下文章
如何在不实际拖放的情况下使用 jQuery UI Droppable 触发 Drop 事件?