【问题标题】:Drag and drop multiple files in a folder to move to a new directory with same folder name拖放文件夹中的多个文件以移动到具有相同文件夹名称的新目录
【发布时间】:2015-10-09 08:22:25
【问题描述】:

我编写了一个批处理文件,使用拖放将文件夹中的多个文件移动到另一个目录,其中一个新文件夹与之前的文件夹同名。

例如,如果我有一个名为 Stuff 的文件夹,并且在此文件夹中我有三个文件 a.png、b.txt 和 c.jpg。

假设包含我要移动的文件的第一个文件夹 Stuff 位于 ...\flower\things\Stuff 之类的目录中。

然后我想在 C:\ 创建一个名为 Stuff 的新文件夹,然后将第一个文件夹 Stuff 中的文件移动到 C:\ 的新文件夹 Stuff

示例 C:\Stuff\a.png, b.txt, c.jpg

我想让它通用,所以如果第一个文件夹的名称与 Stuff 不同,它将使用包含我要移动的文件的文件夹的名称。

我在下面的工作,但我在让它工作之前遇到了很多问题,并且没有太多的编码知识。我想知道批处理文件是否会遇到任何问题,或者是否有更简单或更清洁的方法。

    @ECHO OFF
    ECHO "%~1"
    FOR %%I IN (.) DO SET CurrentD=%%~nI%%~xI
    MKDIR "C:\%CurrentD%"
    :loop
    MOVE "%~1" "C:\%CurrentD%"
    shift
    if not ["%~1"]==[""] goto loop

【问题讨论】:

  • 你可以声明%%~nI%%~xI而不是%%~nxI,它返回相同的......
  • 对不起,如果我之前不清楚。假设保存文件的第一个文件夹 Stuff 位于 ...\flower\things\Stuff 之类的目录中。然后我想在 C:\ 创建一个名为 Stuff 的新文件夹,然后将第一个文件夹 Stuff 中的文件移动到 C:\ 的新文件夹 Stuff。我想让它通用,所以如果第一个文件夹的名称与 Stuff 不同,它将使用包含我要移动的文件的文件夹的名称。
  • 您应该通过编辑您的帖子来澄清您的问题,而不仅仅是评论...

标签: batch-file drag-and-drop


【解决方案1】:
@echo off
if not exist destination-folder\nul (mkdir "destination-folder")
for %%i in (%*) do (
  move "%%~i" "destination-folder"
)

等等,move 命令在这里不需要for loop

@echo off
mkdir "destination-folder"
move %* "destination-folder"

嗯,让我试试

仅作记录:有 another way 但不处理文件名中的空格。

@echo off
setlocal

:again
if "%~1" == "" goto done
move "%~1" "destination-folder"
shift
goto again
:done

哦,等等它在拖放中,但不是在命令行中。我的意思是,如果我输入 script.bat file 1 with space.txt 它会通过拆分每个空格而失败,例如

move "file" "destination-folder"
move "1" "destination-folder"
move "with" "destination-folder"
...

【讨论】:

  • 谢谢。你的 for 循环比我的更简洁。
  • 是的,它是拖放到批处理文件中的,我已经用您的 for 循环替换了批处理文件中 :loop 及以下的所有内容,并且运行良好。
  • @Tou 你欢迎 :) 如果你喜欢这个答案,别忘了点赞。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-10
  • 1970-01-01
相关资源
最近更新 更多