■ 大文字のファイル名を小文字に変換
/*
* rename.c : 大文字のファイル名を小文字に変換
*
* Copyright (c) 2003 AOK.
*
* 2003.10.27 - 初版
* 2003.10.28 - 2版
*
* 使い方: RENAME ファイル [ファイル ...]
*
*/
#include <windows.h>
#include <shlwapi.h>
#include <stdio.h>
#include <mbctype.h>
#pragma comment(lib, "shlwapi.lib")
/* [A-Z] は小文字に変換する */
int MakeLower(char *filename)
{
unsigned char *s = (unsigned char *)filename;
int n = 0;
while (*s != '\0') {
if (*s >= 'A' && *s <= 'Z') {
++n; *s += 0x20;
} else if (_ismbblead(*s)) {
if (*++s == '\0') break;
}
++s;
}
return n;
}
/* 拡張子がすべて大文字かどうか */
BOOL IsUpperExtension(const char *filename)
{
unsigned char *ext;
ext = (unsigned char *)PathFindExtension(filename);
while (*ext != '\0') {
if (*ext >= 'a' && *ext <= 'z') {
return FALSE;
} else if (_ismbblead(*ext)) {
if (*++ext == '\0') break;
}
++ext;
}
return TRUE;
}
/* ファイル名がすべて大文字かどうか */
BOOL IsUpperAll(const char *filename)
{
unsigned char *s = (unsigned char *)filename;
while (*s != '\0') {
if (*s >= 'a' && *s <= 'z') {
return FALSE;
} else if (_ismbblead(*s)) {
if (*++s == '\0') break;
}
++s;
}
return TRUE;
}
/* メイン */
int main(int argc, char *argv[])
{
int i;
char path[MAX_PATH];
char old_name[MAX_PATH];
char new_name[MAX_PATH];
for (i = 1; i < argc; i++) {
lstrcpy(path, argv[i]);
lstrcpy(old_name, argv[i]);
lstrcpy(new_name, argv[i]);
/* カレントディレクトリを変更 */
PathRemoveFileSpec(path);
SetCurrentDirectory(path);
/* ファイル名を取り出す */
PathStripPath(old_name);
PathStripPath(new_name);
/* すべて大文字のものだけ変換 */
if (IsUpperAll(old_name) && MakeLower(new_name) > 0)
{
if (MoveFile(old_name, new_name))
printf("%s -> %s\n", old_name, new_name);
}
}
printf("何かキーを押すと終了します。");
getchar();
return 0;
}