Board logo

标题: [日期时间] 文本处理批处理请教 [打印本页]

作者: netdzb    时间: 2019-6-23 09:56     标题: 文本处理批处理请教

文件夹有堆mp3文件,txt是一行行文本。
如何写个批处理,先显示文本一行内容,
然后再显示文件名。然后显示第二行,
直到结束。
作者: netdzb    时间: 2019-6-23 10:10

回复 2# miqilaosu

比如文件夹下面有

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

文本的内容是

文本1
文本2
文本3

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

最后用evho 显示出 歌名1.mp3  文本的第一行内容
                             歌名2.mp3 文本第二行内容
                             歌名3.mp3 文本第三行内容
作者: miqilaosu    时间: 2019-6-23 10:13

本帖最后由 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没了混和就停止
作者: netdzb    时间: 2019-6-23 10:31

回复 4# miqilaosu

mp3有多个,文本只有1个。
作者: netdzb    时间: 2019-6-23 11:01

回复 4# miqilaosu

这个改成shell脚本该如何写?谢谢。
作者: netdzb    时间: 2019-6-23 11:35

回复 7# miqilaosu

mp3没了停,mp3的数量和文本行数相等。
作者: miqilaosu    时间: 2019-6-23 13:53

本帖最后由 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
复制代码

作者: netdzb    时间: 2019-6-23 16:19

回复 9# miqilaosu

非常感谢。
作者: miqilaosu    时间: 2019-6-23 16:23

回复 10# netdzb


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

回复 4# miqilaosu

这个代码没通过。
作者: netdzb    时间: 2019-6-24 07:11

回复 9# miqilaosu

if ($File.Name -ne $oo) {
                            ~~~
                          这个表示0吗 ?
作者: netdzb    时间: 2019-6-24 07:36

回复 4# miqilaosu

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

#!/bin/bash
cat biao.txt | while read line
do
    echo $line >> b.txt
done
作者: miqilaosu    时间: 2019-6-24 08:41

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

回复 13# netdzb

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

你没执行成功不会是直接在DOS里执行的吧,我那个没加连接符^执行不了,现在加上了
作者: Batcher    时间: 2019-6-24 10:13

回复 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"
复制代码





欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2