我想直接在命令行上输入以下批处理文件代码:
setlocal enabledelayedexpansion
set "type=.jpg"
set "source=c:\"
set "dest=c:\AllPics"
for /r "%source%" %%f in ("*%type%") do (
for %%d in ("%dest%\%%~nf*") do (
set /a count+=1
)
set "source=%%f"
set "dest=%dest%\%%~nf"
xcopy "!source!" "!dest!!count!%type%*"
set count=
)
当我在命令行中输入代码时,不幸的是,找不到该文件,并出现以下错误消息。我该如何修复?
set "type=.jpg" & set "source=C:\" & set "dest=c:\AllPics"
for /r "%source%" %f in ("*%type%") do ( for %d in ("%dest%\%%~nf*") do (set /a count+=1)
set "source=%f" & set "dest=%dest%\%%~nf" & xcopy "!source!" "!dest!!count!%type%*" & set count=)
File not found - !source!
0 File(s) copied
C:\Windows\System32>
答案1
您必须了解内存在命令解释器上的工作原理,才能运行单独的行并使其具有与批处理文件相同的结果。
我不知道内存是如何工作的,所以我不会尝试告诉您如何运行它,而只是说,对于大多数批处理脚本,您不能简单地将脚本的一行一行地粘贴到提示中并获得相同的结果。
运行批处理文件可以处理脚本各个部分之间的信息存储和传递,这就是为什么您应该将其作为一个有凝聚力的脚本来运行,除非有真正令人信服的理由不这样做。
答案2
您不需要定义在表单中this
使用,或者那样...所以,如果你删除你的变量,你将有一个更简单的方法来做你想做的事情this
this
我不是 100% 确定您到底想要做什么,但您的命令表明您要将所有文件递归复制到您的驱动器,并在目标名称下添加源文件夹中存在的文件c:
数量。.jpg
在命令行中执行此操作:
for /r C:\ %f in ("*.jpg")do for /f %d in ('"dir/b "%~dpf*.jpg"|find /v /c """')do copy /y "%~f" "C:\AllPics\%~nf%~d.jpg"
为了防止此执行,还应对目标文件夹采取措施:
for /f tokens^=*useback %f in (`"where /r C:\ "*.jpg"|findstr /bvil "C:\AllPics""`)do for /f %d in ('"dir/b "%~dpf*.jpg"|find /v /c """')do copy /y "%~f" "C:\AllPics\%~nf%~d.jpg"
观察: 如果我误解了您的问题,请告诉我,谢谢......
该xcopy
命令将询问您每个文件,当您的命令运行时它是否是文件或目录,因此您可以更改为copy
...