能力值:
( LV4,RANK:50 )
|
-
-
2 楼
LZ速度真快
试了下感觉不错,确实如 rockinuk 版主说的有些文件会 [e] rename() error ,比如遇到标题换行、特殊字符(比如最后的星号)、冒号,直接送 MoveFileA 肯定会失败。
附件中有三个不能修改的例子
|
能力值:
(RANK:420 )
|
-
-
3 楼
謝謝 jackozoo 版主的熱情奉獻。
我先 download 試試看。
|
能力值:
(RANK:420 )
|
-
-
4 楼
About this tool:
1) 這個 tools 的確有效,不過,有些 filename 的前頭會突然加上 "(" 右括號.
2) 有些論文的 title,或有其它特殊符號,那些 特殊字元,大部份無法當做 filename 的命名規則,譬如 "%, /, 等" ,遇到這些特殊字元,建議可以用 "-" 符號來取代。
等 Jackozoo 版主有空,再改良看看。
|
能力值:
( LV17,RANK:1820 )
|
-
-
5 楼
Support!有时太多文件需重命名,用工具确实方便多了
|
能力值:
(RANK:680 )
|
-
-
6 楼
[QUOTE=deryope;691203]LZ速度真快
试了下感觉不错,确实如 rockinuk 版主说的有些文件会 [e] rename() error ,比如遇到标题换行、特殊字符(比如最后的星号)、冒号,直接送 MoveFileA 肯定会失败。
附件中有三个不能修改的例子[/QUOTE]
某些格式的pdf是会提取失败的, 目前还没做到对所有pdf的Title进行提取 .
|
能力值:
(RANK:420 )
|
-
-
7 楼
有空改寫看看囉,這是個造福人群的開始。
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
建议开源。更优化。
|
能力值:
(RANK:680 )
|
-
-
9 楼
这么小的程序还要开源
拖IDA里, 都一目了然了.
好吧, 代码见下一楼:
|
能力值:
(RANK:680 )
|
-
-
10 楼
代码很烂. 没考虑搜索算法效率.
既然要求开源, 被误导了可不要怪我.
pdf标题提取思路: (我自己统计出来的规律)
搜索第一个"/Count", 再从该位置搜索第一个"/Title", 后面()中的内容即为Title. 垃圾代码:
// RnPdf.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <stdlib.h>
#include <windows.h>
#define KEY1 "/Count"
#define KEY2 "/Title"
void show_usage(char *strPath)
{
printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
printf("------------Pdf Renamer V1.0 By[jackozoo]------------\n");
printf("[+] Usage: %s <filename> \n",strPath);
printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
_exit(1);
}
void fuck_exception()
{
printf("[e] Exception occor ... quit!");
_exit(1);
}
int search_bytes(BYTE *lpData,DWORD length, int offset,char * key)
{
int i;
for (i=0;i<length-offset;i++)
{
if (0 == strncmp((const char*)(lpData+offset+i),key,6)) //6: strlen /Count
{
return i;
}
}
return -1;
}
char *get_title(BYTE * lpData, DWORD length)
{
char *szTitle = new char[255];
memset(szTitle,0,255);
int nPosCount = search_bytes(lpData,length,0,KEY1);
int nPosTitle = search_bytes(lpData,length-nPosCount,nPosCount,KEY2);
char *pC = (char*)(lpData + nPosCount + nPosTitle + 7); //7: /Title(
WORD flagUnicode = *(WORD*)pC;
int i,j;
if (0xfffe == flagUnicode) //UNICODE
{
pC += 2;
for (i=0,j=0;0x29 != *(pC+i);i++,j++)
{
if (0 == *(pC+i))
{
j--;
continue;
}
szTitle[j] = *(pC+i);
}
}
else //ANSI
{
for (i=0;0x29 != *(pC+i);i++)
{
szTitle[i] = *(pC+i);
}
}
return szTitle;
}
char* get_dir(char *path)
{
int nResult;
char *szDir = new char[MAX_PATH];
memset(szDir,0,MAX_PATH);
for(int i=0;i<strlen(path);i++)
{
if ('\\' == path[i])
{
nResult = i+1;
}
}
strncpy(szDir,path,nResult);
return szDir;
}
void _tmain(int argc, _TCHAR* argv[])
{
__asm
{
push offset fuck_exception
push dword ptr fs:[0]
mov dword ptr fs:[0], esp
}
if (2 != argc)
{
show_usage(argv[0]);
}
//set current dir
char *szDir = get_dir(argv[0]);
SetCurrentDirectory(szDir);
FILE * fp = NULL;
if (NULL == (fp = fopen(argv[1],"rb")))
{
printf("[e] Open file error.\n");
return;
}
fseek(fp,0,SEEK_END);
DWORD filesize = ftell(fp);
BYTE * pMemo = new BYTE[filesize+9];
memset(pMemo,0,filesize+9);
fseek(fp,0,SEEK_SET);
fread(pMemo,filesize,1,fp);
fclose(fp);
char * pdfTitle = get_title(pMemo,filesize);
strcat(pdfTitle,".pdf");
printf("[+] Original title: %s \n",argv[1]);
int rResult = rename(argv[1],pdfTitle);
if (0 != rResult)
{
printf("[e] Parse pdf format title failed.\n\n");
}
else
{
printf("[+] New title: %s \n\n",pdfTitle);
}
delete []pMemo;
delete []szDir;
delete []pdfTitle;
__asm
{
pop dword ptr fs:[0]
add esp, 4
}
}
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
我最近一直想采用pdf.ocx,通过读取pdf文件属性,然后再将其中的pdf中的一项值,替换其 title。
个人觉得这是一个不错的思路,针对rock上传的文件中,大部分都有这一属性。在不打开文件的情况下就可以更名了,速度很快。谁感兴趣的话可以探讨。
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
感谢jackozoo的代码,不过还没来得及先看。
|
能力值:
(RANK:420 )
|
-
-
13 楼
Jackozoo 版主滿足一鴻大大 8 樓的要求,那優化就期待您大展身手囉。
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
代码中还有部分汇编代码……呵呵,强大
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
void _tmain(int argc, _TCHAR* argv[])
{
__asm
{
push offset fuck_exception
push dword ptr fs:[0]
mov dword ptr fs:[0], esp
}
if (2 != argc)
{
show_usage(argv[0]);
}
函数作用是什么呢?汇编知识缺乏啊!lz有空解释一下吧。
|
能力值:
( LV4,RANK:50 )
|
-
-
16 楼
[QUOTE=一鸿;692665]void _tmain(int argc, _TCHAR* argv[])
{
__asm
{
push offset fuck_exception
push dword ptr fs:[0]
mov dword ptr fs:[0], esp
}...[/QUOTE]
try {
...
}catch {
}
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
很实用的小东西呢..
下来研究研究
|
能力值:
( LV2,RANK:10 )
|
-
-
18 楼
强大的,膜拜。。。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
19 楼
fuck_exception
感觉代码中出现这样的字眼有点不雅。
|
能力值:
( LV2,RANK:10 )
|
-
-
20 楼
参考:http://bbs.pediy.com/showthread.php?p=743379
其实如果只是提取/Title里的信息的话,可以参考上面的介绍的pdf格式提取。我看了一下,发现很多pdf的/Title属性都是不正确的,或者为空,或者与文章主题无关。
反正还是挺麻烦的。如果提取第一个object的话,对于有些pdf来说可能有页头信息,第一个对象未必是标题,总之挺麻烦的。
|
能力值:
(RANK:680 )
|
-
-
21 楼
的确很麻烦, 有的pdf文档根本都没标题.
|
能力值:
(RANK:420 )
|
-
-
22 楼
|
|
|