使用 DOS 批处理将所有文件上移 1 个目录

使用 DOS 批处理将所有文件上移 1 个目录

我创建了一个批处理文件,可通过 Win7 中的右键菜单执行。当我右键单击文件夹时,我希望批处理文件将所有文件(不包括文件夹)向上移动 1 个目录。到目前为止,我有以下内容:

PUSHHD %1
MOVE "%1\*.*"  ..\

只要我要移动文件的文件夹没有空格,这种方法似乎就有效。当文件夹有空格时,我会收到一条错误消息:“该命令的语法不正确。”

因此,我的批处理可以对标题为 的文件夹起作用PULLTEST,但不能对标题为 的文件夹起作用PULL TEST

再次强调,我不需要它来移动文件夹,只需要移动文件。我希望它能在任何驱动器上的任何目录中工作。我不会在特定的目录中工作。它会是随机的。


下面是我制作的注册表文件,以供需要时参考。

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\PullFiles]
@="PullFilesUP"

[HKEY_CLASSES_ROOT\Directory\shell\PullFiles\command]
@="\"C:\\Program Files\\MyBatchs\\PullFiles.bat\" \"%1\""

答案1

该批处理可以像下面这样简单:

@move "%~1\*" "%~1\.."

波浪号会删除参数值中可能已经存在的任何引号。多余的引号组是问题的根源。

编辑- 如果父目录中已经存在同名文件,您没有说明要发生什么情况。由于 MOVE 命令位于批处理文件中,因此默认是自动覆盖父文件夹中的文件。如果您希望脚本提示输入指令,让您有机会阻止覆盖,那么您需要该/-Y选项。

@move /-y "%~1\*" "%~1\.."

答案2

您的命令拼写pushd错误,您有两个h

您必须%1move命令中删除。如果目录中有空格,move命令就会中断。

假设您的批次名为MoveFiles.bat。它的名称如下:

MoveFiles.bat "C:\Test\With Spaces"

批处理内部参数替换后,如下所示:

PUSHD "C:\Test\With Spaces"
MOVE ""C:\Test\With Spaces"*.*" ..\

第二条命令由于嵌套引号而出现语法错误。


此版本的批处理对我有用:

PUSHD %1
MOVE *.* ..\

答案3

抛出该错误的原因是由于空格。pushd可以使用空格,但move不能。尝试..\用引号括住第二个参数:

PUSHD %1
MOVE "%1*.*" "..\"

相关内容