标题: [求助]請問大哥們我寫的文本替換更名哪裡有錯?(附圖)
[打印本页]
作者: leo1984
时间: 2007-10-31 22:52
标题: [求助]請問大哥們我寫的文本替換更名哪裡有錯?(附圖)
我是新手,剛開始嘗試寫^^"
我有一個目錄的文本,是論壇程序的數據文本
文本以
∥這個作為分隔符
文本內容如下:
流浪漢∥∥搜尋日本AV女優圖片的利器∥http://image.baidu.jp/∥59.113.162.145∥
2007/03/21 13:37∥54188@IMYF.COM∥
我想要把
每個文本一定要是第一行裡,的
2007/03/21 13:37時間的部份用來
更改文本檔案名稱
如下圖:
可是我的寫法卻無法完成,請問是哪個地方寫錯了嗎?
麻煩大哥們指導一下,十分感謝^^
@echo off
for /f "delims=" %%f in ('dir /on/b "*.txt"') do (
for /f "tokens=1,2,3,4,5,6,7 delims=∥" %%i in (%%f) do echo %%i∥%%j∥%%k∥%%m∥%%o∥%%n∥%%l∥
&setlocal enabledelayedexpansion
for /f "delims=." %%i in ('dir /on/b *.txt') do (
ren "%%i".txt
)
pause
Last edited by leo1984 on 2007-10-31 at 10:53 PM ]
作者: 1112yuhua
时间: 2007-10-31 23:07
看到你图片里面是“||”而不是“//"
作者: abcd
时间: 2007-10-31 23:16
@echo off
for %%i in (*.txt) do (
for /f "tokens=*" %%a in ('sed "1{s#^.*\(\{4\}/\{2\}/\{2\}\ \{1,\}:\{1,\}\).*$#\1#;q}" "%%i"^|sed "s###g"') do (
ren "%%i" "%%a%%~xi"
)
)
作者: terse
时间: 2007-11-1 01:43
没有太清楚你的意思:你的文本内容如你图片的话 应该是||而不是∥ 这样试试如何?
@echo off &setlocal enabledelayedexpansion
for /f "delims=" %%f in ('dir /on/b "*.txt"') do (
for /f "tokens=6 delims=^|^|" %%i in (%%f) do (
if not defined aaa set aaa=%%i.txt
set aaa=!aaa:/=!
set aaa=!aaa::=:!
set aaa=!aaa: =-!
)
ren %%f !aaa!
)
pause
Last edited by terse on 2007-11-1 at 02:00 AM ]
作者: zh159
时间: 2007-11-1 02:06
修改一下楼上的(如果是||,将∥改为^|即可,tokens=5根据所需字符位置确定):建议先测试正确再实际操作
@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%f in ('dir /on/b "*.txt"') do (
set n=
for /f "tokens=5 delims=∥" %%i in (%%f) do (
set /a n+=1
if !n! == 1 (
set str=%%i
set str=!str:/=!
set str=!str::=!
ren "%%f" "!str!.txt"
)
)
)
pause
Last edited by zh159 on 2007-11-1 at 02:08 AM ]
作者: terse
时间: 2007-11-1 02:30
重新改了一下 我这里是以贴出的试的 是tokens=6 当然这个是无关的 关键能处理就好。前贴没看是第一排的
:流浪漢|| ||搜尋日本AV女優圖片的利器||
http://image.baidu.jp/||59.113.162.145||2007/03/20 13:37||
54188@IMYF.COM||
@echo off&setlocal enabledelayedexpansion
for %%i in (*.txt) do (
set i=%%i
call :rena
)
pause
goto :eof
:rena
for /f "tokens=6 delims=^|^|" %%i in ('more ^< "%i%"') do (
if not defined line set "line=%%i"
set line=!line:/=!
set line=!line::=!
)
ren "!i!" "!line!.txt"
set line=
Last edited by terse on 2007-11-1 at 02:59 AM ]
作者: leo1984
时间: 2007-11-1 05:31
看來要玩這東西很需要邏輯啊,每位大哥的寫法都不一樣,但都可以成功
我還要多玩玩,不然簡直來這裡開玩笑哩@@
1112yuhua
是
∥沒錯的^^
abcd
哈哈,老大哥果然厲害,一測試就成功了,來台灣一定要給我請客啊^^
terse
您的兩次指令都可以成功,只要把參數改符合庵要的即可,第一次的我有測試,但是檔名沒有去除掉一些符號,會變成
2007/03/21 13:37.txt
十分感謝大哥^^
@echo off &setlocal enabledelayedexpansion
for /f "delims=" %%f in ('dir /on/b "*.txt"') do (
for /f "tokens=5 delims=∥" %%i in (%%f) do (
if not defined aaa set aaa=%%i.txt
set aaa=!aaa:/=!
set aaa=!aaa::=:!
set aaa=!aaa: =-!
)
ren %%f !aaa!
)
pause
zh159
您寫的也是每一次都成功,完全沒問題啊^^
只是這串字符是什麼,我研究不出來@@
set aaa=!aaa:/=!
set aaa=!aaa::=:!
set aaa=!aaa: =-!
Last edited by leo1984 on 2007-11-1 at 05:41 AM ]
作者: abcd
时间: 2007-11-1 07:25
∥是一个字符,不是//两个字符啦
楼主还起的真早啊
作者: leo1984
时间: 2007-11-1 07:40
哈哈~我昨晚搞網站很累
就先睡了,今天就比較早起^^
可以順便請問一下,我在更改文本檔名時
發現無法辨識
- 這個字符
所以更改完檔名後,會變成
61.224.104.78 - 61.224.104.78.txt
而我不需要讓它辨識
- 這個字符
只要將
61.224.104.78 - 61.224.104.78變成
61.224.104.78即可
處理前:
0o0∥1∥ Vista風格語言欄&新版聲音圖示&音量控制界面∥安裝完看起來是不錯,但它是簡體字= =!!!,請問大大要如果想改回來要如何改 @0@???∥61.224.104.78 - 61.224.104.78∥2006/11/01 09:23∥zerg0517@yahoo.com.tw∥
處理後:
0o0∥1∥ Vista風格語言欄&新版聲音圖示&音量控制界面∥安裝完看起來是不錯,但它是簡體字= =!!!,請問大大要如果想改回來要如何改 @0@???∥61.224.104.78∥2006/11/01 09:23∥zerg0517@yahoo.com.tw∥
我試過再寫一個for抓取∥61.224.104.78
- 61.224.104.78
∥
之間的字符刪除
但是都失敗,請問應該如何寫呢?
Last edited by leo1984 on 2007-11-1 at 07:43 AM ]
作者: abcd
时间: 2007-11-1 08:11
如果IP前的一段中,∥的個數是定的,下面的應該可以的。
for /f "tokens=1,2,3,4,5,6* delims=∥-" %%i in (test.txt) do (
echo %%i∥%%j∥%%k∥%%l∥%%m∥%%o
)
作者: abcd
时间: 2007-11-1 08:22
@echo off
for /f "tokens=1* delims=-" %%i in (test.txt) do (
set "str=%%j"
set "str1=%%i"
call set "str=%%str:*∥=%%"
call echo "%%str1:~0,-1%%∥%%str%%"
)
pause
针对个数不定的,不过因为字符串中有&这个特殊字符,所有输出时必须加""了。
作者: leo1984
时间: 2007-11-1 08:27
大哥,似乎是不行的
∥確實是個定數
- 也是定數
我看此迴圈似乎是找到 ∥- 這個字符對吧?
但是剛才測試沒有反應耶@@
還有大哥您還沒上班或上課嗎?
感謝熱情相助哪^^
作者: leo1984
时间: 2007-11-1 08:29
第二段您給的指令它說
這個時候不應有<
是什麼意思呢@@?
作者: abcd
时间: 2007-11-1 08:29
sed "s/\(\{1,3\}\.\{1,3\}\.\{1,3\}\.\{1,3\}\) - \1/\1/" test.txt
用sed快 多了
作者: abcd
时间: 2007-11-1 08:31
因为我是复制"0o0∥1∥ Vista風格語言欄&新版聲音圖示&音量控制界面∥安裝完看起來是不錯,但它是簡體字= =!!!,請問大大要如果想改回來要如何改 @0@???∥61.224.104.78 - 61.224.104.78∥2006/11/01 09:23∥
zerg0517@yahoo.com.tw∥“这一段到记事本处理的。
每一段我都测试过,在我这是可以的。
作者: abcd
时间: 2007-11-1 08:35
第一段的测试结果:
0o0∥1∥ Vista風格語言欄&新版聲音圖示&音量控制界面∥安裝完看起來是不錯,但它是簡體字= =!!!,請問大大要如果想改回來要如何改 @0@???∥61.224.104.78 ∥2006/11/01 09:23∥zerg0517@yahoo.com.tw∥
第二段的测试结果:
"0o0∥1∥ Vista風格語言欄&新版聲音圖示&音量控制界面∥安裝完看起來是不錯,但它是簡體字= =!!!,請問大大要如果想改回來要如何改 @0@???∥61.224.104.78∥2006/11/01 09:23∥zerg0517@yahoo.com.tw∥"
第三段的测试结果:
0o0∥1∥ Vista風格語言欄&新版聲音圖示&音量控制界面∥安裝完看起來是不錯,但它是簡體字= =!!!,請問大大要如果想改回來要如何改 @0@???∥61.224.104.78∥2006/11/01 09:23∥zerg0517@yahoo.com.tw∥
作者: leo1984
时间: 2007-11-1 08:41
作者: abcd
时间: 2007-11-1 08:44
o(∩_∩)o...,我这个只是显示而已,并没有修改文件的。
作者: abcd
时间: 2007-11-1 08:47
作者: leo1984
时间: 2007-11-1 08:51
作者: abcd
时间: 2007-11-1 09:01
我也安裝的卡巴殺軟的。
應該不是這個問題,問題可能是你 的文件是非ansi的。
作者: leo1984
时间: 2007-11-1 09:22
您寫的卻實有寫出來是正確的,但是不會修改到文本本身
但是我需要修改到文本本身
我剛套用zh159大哥再加您得指令
@echo off
md Temp
for /f "delims=" %%f in ('dir /on/b "*.txt"') do (
echo.>Temp\%%~nf.txt
for /f "tokens=1,2,3,4,5,6,7,8 delims=∥-" %%i in (%%f) do echo %%i∥%%j∥%%k∥%%l∥%%m∥%%o∥%%p∥>>Temp\%%~nf.txt
)
pause
寫成功了
小弟新手總算寫成功一次了^^
感謝您指導我成長
好感動啊
平常都玩一些cgi和php,那些指令看慣再看dos,在不知道的領域裡學起來特別困難啊><
雖然我只是簡單套用,但是大哥熱情幫忙就是幫我學習一大步!
Last edited by leo1984 on 2007-11-1 at 09:27 AM ]
作者: abcd
时间: 2007-11-1 09:31
o(∩_∩)o...,一般我是不會去修改文件,只是讓樓主看到效果而已
修改文件只要導出到文件即可。
作者: terse
时间: 2007-11-1 10:44
刚用4楼、5楼、6楼的3个P测试了一下空格文件名后4楼和5楼都没通过,文件内容有重复格式的话 4楼的也不能以第一排内容命名,
6楼的以上测试全部通过!
这方面似乎SED好用哦!
作者: leo1984
时间: 2007-11-1 11:14
確實啊
剛測試我自己寫的,如果遇上沒有 - 符號的,就會把ip字串給刪除
請問sed "s/\([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\) - \1/\1/"
應該如何輸出呢?
似乎不可以加在bat的指令裡@@
作者: abcd
时间: 2007-11-1 11:17
sed "/-/ s/\(\{1,3\}\.\{1,3\}\.\{1,3\}\.\{1,3\}\) - \1/\1/" test.txt>>test1.txt
加个正则就可以只处理带-的行了。
作者: leo1984
时间: 2007-11-1 11:24
老大哥啊
您是知道老弟我處理的是一整個目錄的文本
sed指令看起來既無迴圈也無變數
看起來特別讓小老弟摸不著頭緒
請問如何處理整個目錄的文本並且輸出了
感謝老大哥啊><
作者: abcd
时间: 2007-11-1 11:27
@echo off
md Temp
for %%i in (*.txt) do (
echo.>Temp\%%~ni.txt
sed "/-/ s/\(\{1,3\}\.\{1,3\}\.\{1,3\}\.\{1,3\}\) - \1/\1/" "%%i">>Temp\%%~ni.txt
)
pause
改你的
作者: leo1984
时间: 2007-11-1 11:34
sed果然精準度極高
可以直接指定哪一個字符進行更改
不用像bat要排出陣列來進行更改
兩個結合後可以作出相當於vb軟件程序的效果
看來學會bat之外,另外還要學sed
我的學習之火燃燒起來啦><
感謝老大哥! 這世界有你們才會進步哪
Last edited by leo1984 on 2007-11-1 at 11:35 AM ]
作者: abcd
时间: 2007-11-1 11:47
不只sed命令的,还有很多的,awk或gawk更强大。
许多linux和unix命令真是很好用的。
作者: abcd
时间: 2007-11-1 11:49
这些命令之所以强大的一点是对正则表达式支持的比ms-dos要好。
作者: leo1984
时间: 2007-11-1 12:00
哇~還有awk或gawk兩種更強大?!
那小老弟想學習的話,應該學習哪一些比較正確勒?@@?
還是其實這些指令都是可以互通去瞭解的?