这个问题很不清楚,但我还是试着回答一下。
我想将选定的文件从源复制到目标。
我假设文件是在 Windows 资源管理器中选择的,目标是将具有完整路径的选定文件从驱动器 F: 复制到驱动器 C:,但将第一个目录 Source 替换为 Destination。
这可以使用以下批处理文件来完成:
@echo off
for %%I in (%*) do for /F "tokens=1* delims=\" %%J in ("%%~pI") do %SystemRoot%\System32\xcopy.exe "%%~I" "C:\Destination\%%K" /C /F /G /H /K /R /Y
pause
批处理文件可以存储在任何目录中。要在 Windows 资源管理器中使用所选文件运行它,需要在您的用户帐户的 SendTo 文件夹中创建一个快捷方式文件 (*.lnk)。
SendTo 文件夹在 Windows XP 上为文件夹 %USERPROFILE%\SendTo,在 Windows Vista 和更高版本的 Windows 上为文件夹 %APPDATA%\Microsoft\Windows\SendTo。
要创建快捷方式文件,请在批处理文件上单击辅助(右键)鼠标,然后单击菜单项发送到子菜单中打开的上下文菜单桌面(创建快捷方式)。
切换到您的 Windows 桌面并在刚刚创建的快捷方式上单击辅助(右键)鼠标按钮,然后在打开的上下文菜单中左键单击最后一项 属性。
首先追加到Target字符串 %*(空格、百分号、星号),这对于稍后使用所有文件的完整限定文件名运行批处理文件很重要Windows 资源管理器作为参数传递给批处理文件的选定文件。其次,在Comment 中写一条评论,以便您以后了解此快捷方式在使用它时的作用。您也可以单击按钮更改图标,然后从%SystemRoot%\System32\shell32.dll 中选择一个比Windows 自动为批处理文件快捷方式选择的图标更好的图标。然后用 OK 按钮关闭 Properties。
在刚刚创建和修改的快捷方式上再次使用辅助(右)鼠标按钮单击菜单项重命名上的主(左)鼠标按钮。将快捷方式文件重命名为您想要的任何名称,例如复制所选文件。
现在 Windows 桌面上的快捷方式文件已准备好移动到SendTo 文件夹。因此,使用主(左)鼠标按钮单击快捷方式文件,按 Ctrl+X 将其剪切,在 Windows 资源管理器中打开您的用户帐户的 SendTo 文件夹并粘贴使用 Ctrl+V 的快捷方式文件进入该文件夹。
批处理文件现在可以在 Windows 资源管理器中使用了。您可以在F:\Source 中选择一个或多个文件(不是文件夹),在其中一个选定文件上单击辅助(右键)鼠标按钮以打开上下文菜单并在子菜单中单击左键在复制所选文件上发送到或您为快捷方式文件指定的任何名称。
批处理文件运行 FOR 循环处理所有传递给以%* 引用的批处理文件的文件名。每个文件名一个接一个地分配给循环变量I。
没有驱动器号F: 的当前文件的路径由第二个FOR 处理,它使用反斜杠作为分隔符将路径字符串分成两个子字符串。第一个子字符串是Source,它被分配给指定的循环变量J,它不再被使用。根据ASCII table,\Source\ 之后没有驱动器号和冒号的所有其他路径都分配给下一个循环变量K。所以循环变量K 保存当前文件的目录路径,没有F:\Source\ 并以反斜杠结尾,这对于下一个命令 XCOPY 很重要。
注意:tokens= 后面的数字决定了从源文件路径中忽略的目录级别数。
命令XCOPY用于将完全限定文件名保存在循环变量I中的文件复制到文件夹C:\Destination,并创建目录树作为循环变量中的保存K 如有必要。如果目标参数以反斜杠结尾,XCOPY 总是将目标参数解释为目录。这就是为什么循环变量K 保存以反斜杠结尾的路径如此重要的原因。
在复制所有文件后,由于命令 PAUSE,批处理文件处理的执行被 cmd.exe 暂停,以便您可以验证一切是否按预期工作。
请注意,批处理文件不能用于一次复制数千个文件。命令行的长度受 Windows 限制。所以不可能从 Windows 资源管理器传递到批处理文件中的数千个完全限定的文件名。
要了解所使用的命令及其工作原理,请打开命令提示符窗口,在其中执行以下命令,并仔细阅读每个命令显示的所有帮助页面。
-
call /? ...解释%*。
echo /?
for /?
xcopy /?