[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[日期时间] 文本处理批处理请教

文件夹有堆mp3文件,txt是一行行文本。
如何写个批处理,先显示文本一行内容,
然后再显示文件名。然后显示第二行,
直到结束。

回复 2# miqilaosu

比如文件夹下面有

歌名1.mp3
歌名2.mp3
歌名3.mp3

文本的内容是

文本1
文本2
文本3

mp3的数量和文本行数相等。

最后用evho 显示出 歌名1.mp3  文本的第一行内容
                             歌名2.mp3 文本第二行内容
                             歌名3.mp3 文本第三行内容

TOP

本帖最后由 miqilaosu 于 2019-6-23 10:21 编辑

回复 3# netdzb
  1. @echo off
  2. for /f %%i in ('dir /a-d /b "*.mp3"')do (
  3. for /f %%a in ('type 1.txt')do (
  4. echo.%%i %%a
  5. )
  6. )
  7. pause
复制代码
你这个思路好像不太对,如果是一个文本可以这样写,如果是多个文件,你想用什么条件去查找文件,你要用的是文本第几行?,mp3有没有重复,如果没有重复,是不是文本1,文本2,都去和mp3混着来? 停止的条件是什么,比如文件夹里只有一个mp3文件,是不是循环着和txt混和,还是mp3没了混和就停止

TOP

回复 4# miqilaosu

mp3有多个,文本只有1个。

TOP

回复 4# miqilaosu

这个改成shell脚本该如何写?谢谢。

TOP

回复 7# miqilaosu

mp3没了停,mp3的数量和文本行数相等。

TOP

本帖最后由 miqilaosu 于 2019-6-25 09:35 编辑

回复 8# netdzb
  1. @echo off
  2. setlocal ENABLEDELAYEDEXPANSION
  3. set "n=0"&set "nn=0"
  4. for /f "delims=" %%i in ('dir /a-d /b "*.mp3"') do (
  5. call set "str[!n!]=%%~i"
  6. set /a n+=1
  7. )
  8. for /f "delims=" %%a in ('type "ip.txt"') do (
  9. call set "str1[!nn!]=%%~a"
  10. set /a nn+=1
  11. )
  12. for /l %%d in (0,1,!n!) do (
  13. echo.!str[%%d]! !str1[%%d]!
  14. )
  15. pause
复制代码
上边是DOS的方法,下边的shell的方法,DOS没有数组不太好执行
  1. powershell -NoProfile -ExecutionPolicy Bypass ^
  2. $text = Get-Content -Path c:\ip.txt;^
  3. $n=0;^
  4. foreach($file in dir *.mp3)^
  5. {^
  6. Write-Host($File.Name,$text[$n]);^
  7. $n+=1;^
  8. }^
  9. exit
  10. pause
复制代码

TOP

回复 9# miqilaosu

非常感谢。

TOP

回复 10# netdzb


    如果出现mp3和文本数量不对应,可以通过FOR的最大值!n!或!nn!来控制哪个没有了就不执行,我也是边做边学,都是新人互相帮助

TOP

回复 4# miqilaosu

这个代码没通过。

TOP

回复 9# miqilaosu

if ($File.Name -ne $oo) {
                            ~~~
                          这个表示0吗 ?

TOP

回复 4# miqilaosu

你看看shell脚本,参考这个办法可以吗?

#!/bin/bash
cat biao.txt | while read line
do
    echo $line >> b.txt
done

TOP

本帖最后由 miqilaosu 于 2019-6-25 09:25 编辑

回复 13# netdzb

4楼的代码别用,那个没做判断,有重复,用9楼的两个代码就行
    if 是我测试时的代码删除掉就行了
if ($File.Name -ne $oo) {  如果 文本的名字不等于$oo变量的内容的话,执行里边命令,因为最开始做判断,后来被我把判断删了

你没执行成功不会是直接在DOS里执行的吧,我那个没加连接符^执行不了,现在加上了

TOP

回复 9# miqilaosu


可以试试这样简化一下
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /f "delims=" %%i in ('dir /b /a-d *.mp3') do (
  4.     set /p str=
  5.     echo %%i !str!
  6. ))<"文本.txt" >"结果.txt"
复制代码
1

评分人数

    • miqilaosu: 原来还可以这么用,又学了一招技术 + 1
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表