Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.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 修改循环变量cmd_Batch File_Cmd - Fatal编程技术网

Batch file 修改循环变量cmd

Batch file 修改循环变量cmd,batch-file,cmd,Batch File,Cmd,我想做的事情是从包含各种视频文件名的文本文件中筛选出特定的视频文件扩展名,例如filename.txt内容 Red.mp4 Yellow.mp4 Blue.mp4 Orange.wmv Purple.wmv 现在,我将只为.mp4解析这个文件&使用“for parameter”生成几个文件,每个文件都包含特定文件的特定代码。换句话说,将创建与filename.txt我的代码中的.mp4视频数量相同的文件数量 ::== @echo off setLocal EnableDelayedExpans

我想做的事情是从包含各种视频文件名的文本文件中筛选出特定的视频文件扩展名,例如filename.txt内容

Red.mp4
Yellow.mp4
Blue.mp4
Orange.wmv
Purple.wmv
现在,我将只为.mp4解析这个文件&使用“for parameter”生成几个文件,每个文件都包含特定文件的特定代码。换句话说,将创建与filename.txt我的代码中的.mp4视频数量相同的文件数量

::==
@echo off
setLocal EnableDelayedExpansion
for /f "tokens=* delims= " %%a in ('type filename.txt ^|findstr ".mp4"') do (
set /a n+=1
echo >myfile!n!.txt
set v!n!=x264 --crf 23  --level 3.1 --tune film --o "%%a" "%%a.mkv"
)
set v
pause
::==
我有两个问题:

  • 如何修改%%a以删除其.mp4字符串,因为当我应用“%%a.mkv”时,一个文件将命名为*.mp4.mkv,我不希望这样,并且.mp4可以像--o“%%a.mp4”“%%a.mkv”那样手动键入
  • 如果已经创建了所需的txt文件,如何传递变量v1、v2、v3。。。到我尝试使用的相应文本文件

    回音%v!n!%%>>我的文件!N文本 循环中,但它不起作用,因此请提供建议


  • 我认为没有必要创建一个带有一个循环的变量数组,然后在第二个循环中将内容添加到文件中。只需在一个循环中完成所有操作

    此外,不需要创建空文件,并且您的尝试不正确-它会在每个文件中添加一行
    ECHO关闭。
    。要回显空行,应使用
    >filename echo(
    )创建空文件,请使用
    copy num filename

    这不太可能是一个问题,但文件名可能包含
    。如果启用延迟扩展,则包含
    的for变量的扩展将损坏。可以通过在循环中打开和关闭延迟扩展来解决此问题,但还有另一个解决方案:使用另一个FINDSTR命令用行号结束每一行,然后用FOR循环解析行号和文件名。这样就不需要增加计数器,也不需要延迟扩展

    变量修饰符的
    ~n
    用于获取不带扩展名的名称

    @echo off
    for /f "tokens=1* delims=:" %%A in (
      'findstr /lie ".mp4" filename.txt^|findstr /n "^"'
    ) do (
      >"myfile%%A.txt" echo x264 --crf 23 --level 3.1 --tune film --o "%%B" "%%~nB.mkv"
    )
    

    我建议使用
    echo.>filename
    来回送空行。它比其他选项更容易阅读。