Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 如何使用条件复制将jpg文件转发到特定扩展名和特定数据库的人来改进批处理文件?_Batch File - Fatal编程技术网

Batch file 如何使用条件复制将jpg文件转发到特定扩展名和特定数据库的人来改进批处理文件?

Batch file 如何使用条件复制将jpg文件转发到特定扩展名和特定数据库的人来改进批处理文件?,batch-file,Batch File,我用以下代码创建了一个.bat文件,以便将一个随机文件从目录a-POOL文件夹复制到目录B-FOLDER(具有固定的文件名video.mp4)。因此,在目录A中有一个.mp4文件池,在目录B中有一个文件video.mp4(名称相同,但每次执行批处理文件时视频不同) 这是一个代码谁做这件事。它非常有效 @echo off setlocal EnableDelayedExpansion cd C:\Users\aless\Desktop\example\A-POOL set

我用以下代码创建了一个.bat文件,以便将一个随机文件从目录a-POOL文件夹复制到目录B-FOLDER(具有固定的文件名video.mp4)。因此,在目录A中有一个.mp4文件池,在目录B中有一个文件video.mp4(名称相同,但每次执行批处理文件时视频不同)

这是一个代码谁做这件事。它非常有效

@echo off
    setlocal EnableDelayedExpansion
    cd C:\Users\aless\Desktop\example\A-POOL
    set n=0
    for %%f in (*.*) do (
       set /A n+=1
       set "file[!n!]=%%f"
    )
    for /L %%i in (1,1,%time:~-1%) do set "dummy=!random!"
    set /A "rand=(n*%random%)/32768+1"
    copy "!file[%rand%]!" C:\Users\aless\Desktop\example\B-FOLDER\video.mp4
    FOR %%G IN ("!file[%rand%]!") DO >"C:\Users\aless\Desktop\example\B-FOLDER\title.txt" ECHO %%~nG
现在的问题(与上次不同): 在A-POOL目录中,我有很多.mp4文件。我手动更改了每个文件的.mp4扩展名,其中包含一个表示食物的代码

例如:Filename.pizza、Filename2.pizza、Filename.意大利面、Filename200.意大利面、Filename.cheeseburger等

我创建了另一个名为“FOOD-DATABASE”(在
C:\Users\ales\Desktop\FOOD-DATABASE
中)的文件夹,其中包含一个大型的图像数据库,位于食品的
.jpg
扩展中。食品数据库的文件名等于
A-POOL
文件夹中包含的文件的文件扩展名

食品数据库文件夹的内容: (意大利面、比萨饼、奶酪汉堡等)

因此,我需要在代码中添加一个字符串/条件,执行e命令,并说:

如果拾取的随机文件具有扩展名.pizza,请将pizza.jpg从C:\Users\aless\Desktop\FOOD-DATABASE复制到C:\Users\aless\Desktop\B-FOLDER\FOOD.jpg(固定名称文件)

事实上,我不想为每种食物添加这个字符串。。。代码字符串必须读取所选随机文件的扩展名,并从C:\Users\aless\Desktop\FOOD-DATABASE复制到C:\Users\aless\Desktop…B FOLDER\FOOD.JPG(固定名称文件),将同名文件复制到随机文件的扩展名


真是一团糟。。。我知道;)谢谢你的帮助

如评论中所述,我们知道一个文件的扩展名是另一个文件的名称。因此,这些变量展开式很重要:

%%~nG
%%~xG
最后一个
for
循环从扩展的
%%~xG
设置一个变量
%food%
,它是文件的扩展名,使用一个随机示例是
。pizza
我们只需要去掉
,您就有了
pizza
。我们通过
%food:~1
做到这一点

@echo off
setlocal EnableDelayedExpansion
pushd "%userprofile%\Desktop\example\A-POOL"
set n=0
for %%f in (*.*) do (
   set /A n+=1
   set "file[!n!]=%%f"
)
for /L %%i in (1,1,%time:~-1%) do set "dummy=!random!"
set /A "rand=(n*%random%)/32768+1"
copy "!file[%rand%]!" "..\B-FOLDER\video.mp4" /Y
for %%G IN ("!file[%rand%]!") DO (
    echo %%~nG > "..\B-FOLDER\title.txt"
    set "food=%%~xG"
)
copy "..\FOOD-DATABASE\%food:~1%.jpg" "..\B-FOLDER\food.jpg" /Y
popd
注意

  • 我使用的是
    pushd
    而不是
    cd
    ,并且使用的是相对路径,而不是完整路径,因为我们在同一文件夹结构中工作

  • 我可以看出您是在您自己的配置文件上运行此功能的,因此我将
    C:\users\
    替换为
    %userprofile%
    。如果其他人希望从类似的文件夹运行此功能,他们的
    将有所不同

  • 脚本底部的
    popd
    只需更改回上一次
    pushd
    之前的工作目录。此特定脚本不需要它,但需要添加它,以便与
    pushd

  • 我修改的所有项目都有一些很好的帮助主题,您可以在
    cmd
    上找到帮助主题,只需运行带有附加
    /?
    的命令名,例如
    for/?
    set/?


  • 您已经为我们提供了完美的工作代码,它没有表现出特定和可复制的问题。除此之外,您还编写了与代码无关的文本。您需要做的是使用该工具重新审视您的问题,并提供与新问题相关的代码,在文件树之前和之后提供这些代码,以便您的漫谈在编程级别上有意义。在进行这些更改之前,请确保您已使用并阅读了的所有链接页,以便更好地了解对您的要求。我在上一个问题中向您展示了如何将文件名与文件扩展名分开。是的,我知道并实现了您给我的字符串。成功。不幸的是,这种随机和条件代码对我来说非常复杂,我无法用我的超基础知识理解它。我尝试了很多,但这是一种高级情况。当您提供的代码没有显示您所遇到的问题,并且问题的描述(尤其是您提到的一些文件路径)与您的代码不匹配时,很难为您提供帮助。打开命令提示符,键入:
    以获取/?
    阅读帮助文件。请关注帮助文件的最后部分,该文件描述了变量修饰符的
    。好的,我将进行讲解并编辑问题,谢谢您的建议