标题: 请教高手:改文件名
[打印本页]
作者: shanyinwx
时间: 2008-5-7 18:43
标题: 请教高手:改文件名
我这里有几千个TXT文件,其文件名都是数字或者字母组合的,如:89u.txt、fsa.txt、tfsd.txt等,很难从一大堆文件中分清楚到底谁是谁,要是逐个地打开查找费时又费力,这样就给查阅带来了很大的不方便,。如果能将文件内容的前10个字符添替换为文件名,起到索引的作用,找起文件来就方便省事多了。但是文件内容大多开头都有空行,所以我想将搜寻内容定在前3行,长度为10个字符(不分中英文),这样文件名就是以文件内容开头的前10个字符组成的,查阅起来就方便多了,
请高手指教我该怎么写这样一个批处理。。
作者: pusofalse
时间: 2008-5-7 19:08
但是文件内容大多开头都有空行,所以我想将搜寻内容定在前3行。。。。
----------------------------------------------
这句没看懂~~~
应该举个实例
比如 89u.txt中的内容如下:
-----------start here-----------------
1234567890ajfdlaj
asfdafak;adsf
afdk;lfda
--------cut here--------------------
是不是把89u.txt改成1234567890.txt?
作者: slore
时间: 2008-5-7 19:30
for是忽略空行的……
作者: pusofalse
时间: 2008-5-7 19:44
如果真是这样。。。。试下下面的代码吧
@echo off&setlocal enabledelayedexpansion
for %%a in (*.txt) do (
set n=0
for /f "delims=" %%i in (%%a) do (
set/a n+=1
if !n! equ 1 set str=%%i&ren %%a !str:~0,10!.txt
)
)
pause
rem 如果行中有特殊字符会出错。。如果两个文件中的第一行的前10个字符一样,也会出错
作者: bat-zw
时间: 2008-5-7 21:13
标题: 没测试:
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir /s /b *.txt') do (
call :lp %%i
for /f "delims=" %%j in ('dir /s /b *.txt') do if "%%~nj"=="!name!" set name=!name!%random:~,1%
ren "%%~dpnxi" "!name!.txt"
)
echo 改名全部完成!
pause>nul&goto :eof
:lp
for /f "delims=" %%i in (%~dpnx1) do (
set a=%%i
if not "!a:~10!"=="" set name=!a:~,10!&goto :eof
)
[
Last edited by zw19750516 on 2008-5-7 at 10:09 PM ]
作者: 26933062
时间: 2008-5-7 21:46
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir /s /b *.txt') do (
set "name="
for /f "delims=" %%a in ('type "%%i"') do (
if not defined name set "name=%%a"
)
ren "%%i" "!name:~-10!%%~xi"
)
echo 改名全部完成!
pause>nul
作者: shanyinwx
时间: 2008-5-8 00:43
Quote: |
Originally posted by pusofalse at 2008-5-7 07:08 PM:
但是文件内容大多开头都有空行,所以我想将搜寻内容定在前3行。。。。
----------------------------------------------
这句没看懂~~~
应该举个实例
比如 89u ... |
|
对,就是这样
作者: pusofalse
时间: 2008-5-8 00:47
Quote: |
Originally posted by shanyinwx at 2008-5-8 12:43 AM:
对,就是这样 |
|
OK 那就用我那代码吧 但第一行的前十个字符中如果有特殊字符的话,不能保证不会出错
作者: shanyinwx
时间: 2008-5-8 00:47
谢谢各位高手。。
作者: shanyinwx
时间: 2008-5-8 01:03
但是现在我又发现了一个问题:还有很多的文件内容在开头的几行是相同的,这样就只能命名一个文件,而其他的文件则不能改名,改怎么办,再次请教高手?能不能在这些文件名的后面加个数字或者什么的来区分呢?
[
Last edited by shanyinwx on 2008-5-8 at 01:29 AM ]
作者: pusofalse
时间: 2008-5-8 01:34
Quote: |
Originally posted by shanyinwx at 2008-5-8 01:03 AM:
但是现在我又发现了一个问题:还有很多的文件内容在开头的几行是相同的,这样就只能命名一个文件,而其他的文件则不能改名,改怎么办,再次请 ... |
|
如果存在重名的,就提取文件中第一行的前11个字符作为文件名,其他的仍是前10个。。。。
@echo off&setlocal enabledelayedexpansion
for %%a in (*.txt) do (
set n=0
for /f "delims=" %%i in (%%a) do (
set/a n+=1
if !n! equ 1 set str=%%i&ren %%a !str:~0,10!.txt>nul 2>nul || ren %%a !str:~0,11!.txt
)
)
pause
[
Last edited by pusofalse on 2008-5-8 at 01:39 AM ]
作者: 26933062
时间: 2008-5-8 01:46
那就这样,若有重名文件就在后面加序号。
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir /b *.txt') do (
set n=0&set "name="
for /f "delims=" %%a in ('type "%%i"') do (
if not defined name set "name=%%a"
)
if exist "!name:~-10!%%~xi" (call :loop "%%i") else (
ren "%%i" "!name:~-10!%%~xi"
)
)
echo 改名全部完成!
pause>nul
exit
:loop
set /a n+=1
if exist "!name:~-10!%n%%~x1" goto loop
ren "%~1" "!name:~-10!%n%%~x1"
goto :eof
作者: shanyinwx
时间: 2008-5-8 06:48
非常感谢。。。。。