Windows 7 批量拖放文件和文件夹

Windows 7 批量拖放文件和文件夹,windows-7,batch-file,Windows 7,Batch File,我正在尝试使用一个解决方案从拖放选择中复制多个文件和文件夹,我认为应该是这样的: mkdir newdir for %%a in ("%*") do ( echo %%a ^ >>new.set ) for /f "tokens=* delims= " %%b in ('type "new.set"') do ( SET inset=%%b call :folderchk if "%diratr%"=="d" robocopy "%%b" "newdir" "*.*" "*.*" /

我正在尝试使用一个解决方案从拖放选择中复制多个文件和文件夹,我认为应该是这样的:

mkdir newdir
for %%a in ("%*") do (
echo %%a ^ >>new.set
)
for /f "tokens=* delims= " %%b in ('type "new.set"') do (
SET inset=%%b
call :folderchk
if "%diratr%"=="d" robocopy "%%b" "newdir" "*.*" "*.*" /B /E && exit /b
copy /Y %%b newdir
)

exit /b

:folderchk
for /f tokens=* delims= " %%c in ('dir /b %inset%') do (
set atr=%~ac
set diratr=%atr:~0,1%
)
我曾尝试从以下示例中拼凑代码,但我被卡住了:


使用拖放操作处理特殊字符很棘手,因为不能可靠地引用它们

空格不是很复杂,因为带有空格的文件名会自动引用。
但是有两个特殊的字符可以产生问题,感叹号和符号

带有符号和的名称不会自动引用,因此可以通过这种方式调用批次

myBatch.bat Cat&Dog.txt
这会产生两个问题,首先是参数不完整。
%1
%*
中,只有文本
Cat
不能通过正常参数访问
&Dog.txt
部分,只能通过
cmdline
变量访问。
这应该通过延迟扩展来扩展,否则可以从文件名中删除感叹号和插入符号。
当批处理结束时,应使用
exit
命令关闭cmd窗口,否则将执行
&Dog.txt
,并正常产生错误

因此,读取文件名列表应该如下所示

@echo off
setlocal ENABLEDELAYEDEXPANSION
rem Take the cmd-line, remove all until the first parameter
set "params=!cmdcmdline:~0,-1!"
set "params=!params:*" =!"
set count=0

rem Split the parameters on spaces but respect the quotes
for %%N IN (!params!) do (

  echo %%N
)

pause
REM ** The exit is important, so the cmd.ex doesn't try to execute commands after ampersands
exit

您引用的链接中也描述了这一点

您能告诉我们您卡在哪里吗?老实说,我只是不够聪明。我需要批处理具有特殊字符和空格的文件。