如何直接在命令行上输入以下批处理文件代码

如何直接在命令行上输入以下批处理文件代码

我想直接在命令行上输入以下批处理文件代码:

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使用,或者那样...所以,如果你删除你的变量,你将有一个更简单的方法来做你想做的事情thisthis

我不是 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...

相关内容