我创建了一个批处理文件,可通过 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
。
您必须%1
从move
命令中删除。如果目录中有空格,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*.*" "..\"