标题: [日期时间] 文本处理批处理请教 [打印本页]
作者: 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 - @echo off
- for /f %%i in ('dir /a-d /b "*.mp3"')do (
- for /f %%a in ('type 1.txt')do (
- echo.%%i %%a
- )
- )
- 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 - @echo off
- setlocal ENABLEDELAYEDEXPANSION
- set "n=0"&set "nn=0"
- for /f "delims=" %%i in ('dir /a-d /b "*.mp3"') do (
- call set "str[!n!]=%%~i"
- set /a n+=1
- )
- for /f "delims=" %%a in ('type "ip.txt"') do (
- call set "str1[!nn!]=%%~a"
- set /a nn+=1
- )
- for /l %%d in (0,1,!n!) do (
- echo.!str[%%d]! !str1[%%d]!
- )
- pause
复制代码
上边是DOS的方法,下边的shell的方法,DOS没有数组不太好执行- powershell -NoProfile -ExecutionPolicy Bypass ^
- $text = Get-Content -Path c:\ip.txt;^
- $n=0;^
- foreach($file in dir *.mp3)^
- {^
- Write-Host($File.Name,$text[$n]);^
- $n+=1;^
- }^
- exit
- 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
可以试试这样简化一下- @echo off
- setlocal enabledelayedexpansion
- (for /f "delims=" %%i in ('dir /b /a-d *.mp3') do (
- set /p str=
- echo %%i !str!
- ))<"文本.txt" >"结果.txt"
复制代码
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |