●ファイル名の文字列置換

※動作検証:未実施。

ファイル名の文字置換バッチ(特殊文字、制御文字置換)
・ドラッグアンドドロップ対応: 未対応。
  ※処理対象ファイルのフルパスに、半角空白が含まれている場合には、
   コマンドプロンプト画面で、自動で、D&Dしたファイル名が””で囲まれて処理されるため可能。
  ※処理対象ファイルのフルパスに、半角空白が含まれていない場合には、
   コマンドプロンプト画面で、自動で、D&Dしたファイル名が””で囲まれないため、
   下記結果が発生して処理不可能。
    ファイル名に半角&記号がある場合: 半角&起動がDOSコマンドとして認識されてしまうためエラー発生する。
   ⇒BATファイルを、下記内容のVBSファイル(=拡張子vbs)から呼び出すようにすれば、可能かも。(未検証)
    ※「C:\XXXXX.bat」の箇所は、文字置換BATファイルをフルパスで指定する。
CreateObject("WScript.Shell").Run "cmd /C C:\XXXXX.bat """ & WScript.Arguments.Item(0) & """"
  
<スクリプトファイル>
@echo off

:RENAME_FILE_NAME

rem <処理内容>
rem  ファイル名リネーム処理
rem <概要>
rem  ・ファイル名に含まれる、半角の特殊記号を、全角に置換する。
rem  ・任意の文字を、別の文字/文字列へ置換する。
rem <引数>
rem  ・第1引数: 処理対象ファイルをフルパスで指定する。
rem <戻り値>
rem  なし
rem 


rem 変数を初期化
set name_dir=
set name_main=
set name_ext=
set source=
set pick=
set output=


setlocal

rem 第1引数で受け取った処理対象ファイルのフルパスから、
rem 各情報を抽出して各変数に格納。
set name_dir=%~dp1
set name_main="%~n1"
set name_ext=%~x1


set source="%name_main:~1,-1%"


:chkstr
rem ↓1文字抽出
set pick="%source:~1,1%"
call :match
rem ↓初回
if "%output%"=="" set output=%pick:~1,-1%& goto chkstr2
rem ↓以降
set output=%output%%pick:~1,-1%


:chkstr2
rem ↓ 文字列シフト(カウント兼用)
set source="%source:~2,-1%"
if %source%=="" goto exec
goto chkstr
:exec
echo ren "%name_dir%%name_main:~1,-1%%name_ext%" "%output%%name_ext%"

goto end


:match
rem ↓“ ” なし注意(2重回避)
if %pick%=="!" set pick="!"
rem ダブルコーテション記号の判定処理は、
rem 「コマンドの構文が誤っています。」エラーが出て判定処理できず。原因不明。
rem if %pick%==""" set pick="”"
if %pick%=="#" set pick="#"
if %pick%=="$" set pick="$"
if %pick%=="%%" set pick="%"
if %pick%=="&"  set pick="&"
if %pick%=="'" set pick="’"
if %pick%=="(" set pick="("
if %pick%==")" set pick=")"
if %pick%=="-" set pick="―"
if %pick%=="=" set pick="="
if %pick%=="^" set pick="^"
if %pick%=="~" set pick="〜"
if %pick%=="\" set pick="¥"
if %pick%=="|" set pick="|"
if %pick%=="@" set pick="@"
if %pick%=="`" set pick="‘"
if %pick%=="[" set pick="["
if %pick%=="{" set pick="{"
if %pick%==";" set pick=";"
if %pick%=="+" set pick="+"
if %pick%==":" set pick=":"
if %pick%=="*" set pick="*"
if %pick%=="]" set pick="]"
if %pick%=="}" set pick="}"
if %pick%=="," set pick=","
if %pick%=="<" set pick="<"
if %pick%=="." set pick="."
if %pick%==">" set pick=">"
if %pick%=="/" set pick="/"
if %pick%=="?" set pick="?"
if %pick%=="_" set pick="_"

rem 必要なら下記のように、記号1文字を複数文字へ置換することも可能。
rem if %pick%==""  set pick="(1)"
rem if %pick%==""  set pick="III"

goto :eof


:end
endlocal
pause

参考HP:
http://deepsky.blog.so-net.ne.jp/2011-09-28




●ファイル名内の重複文字を1文字にする

作成中
ファイル内容に特殊文字がある場合の動作検証、未検証。

@echo off

rem リネーム処理(ファイル名の、最初の「_」までを、その「_」自身も含めて削除)

rem 遅延環境変数の利用を宣言
setlocal enabledelayedexpansion

rem 変数宣言・値の格納

rem 重複調査対象文字を変数に格納。
set myDuplicateCharacter="_"


rem ■主処理
for /F "delims=" %%A in ('dir /b *.txt') do (
set myTempString=%%A&&call :sub %*)

exit /b

rem ==============================================
rem ■サブ処理
rem ==============================================
:sub

set /a myTempStringLength=0
set /a i=0
set /a j=0
set MyPreCharacter=NUL

rem 文字数カウント
:LOOP_CountStringLength
if not !!myTempString:~%myTempStringLength%^,1!==!! (
  set/a myTempStringLength+=1
  goto LOOP_CountStringLength
)

set /a myTempStringLength=myTempStringLength-1

:LOOP_CharacterChangeProcess

rem 文字列から文字を1文字ずつtmpCarに抽出。

rem 1行あたりの最大文字数に達しなければ、ループ処理する。(=現在の走査文字を出力する。)
if %i% LEQ %myTempStringLength%  (
  set tmpCar=!!myTempString:~%i%,1!!

  rem 走査した文字が重複調査対象文字の場合
  if "!tmpCar!"=="%myDuplicateCharacter:"=%" (
    
    rem 2つ目以降の重複調査対象文字の場合
    if "!MyPreCharacter!"=="!tmpCar!" (
      set MyPreCharacter=!tmpCar!
      set /a i=i+1
      set /a j=j+1
      goto :LOOP_CharacterChangeProcess
    ) else (
      rem 重複調査対象文字が連続して出現した場合
      set myPreName[%j%]=!tmpCar!
      set MyPreCharacter=!tmpCar!
      
      set /a i=i+1
      set /a j=j+1
      goto :LOOP_CharacterChangeProcess
    )
  ) else (
    rem 走査した文字が重複調査対象文字でない場合
    set myPreName[%j%]=!tmpCar!
    set MyPreCharacter=!tmpCar!
    set /a i=i+1
    set /a j=j+1
    
    goto :LOOP_CharacterChangeProcess
  )

  rem 1行あたりの最大文字数に達したらループをせず、改行を出力する。
) else (
  rem リネーム後ファイル名を変数に格納
  rem     set /a k=0
  set X=
  rem  set myPreName=

:LOOP_Set_Hairetu_to_Hensuu
set /a k=k+1

if !k! LEQ %myTempStringLength% (
  rem    if not !!myPreName[%k%]!!=="" (
  set /P myStr=!!myPreName[%k%]!!<NUL
  rem      set /a k=k+1
  echo !!myPreName[%k%]!!
  pause
  goto LOOP_Set_Hairetu_to_Hensuu

rem    ) else (
rem      set /P myStr=echo;<NUL
rem    )

  ) else (
  rem
  )
)
endlocal

:END


コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

▼当HP内検索▼

▼メインメニュー▼



管理者用リンク
書籍(技術書)
・利用ソフト一覧
・Ethereal/Wireshark

転送速度




・powershell

・VBA










・Microsoft SQLserver








●CentOS6.9


▼動画サーバ関係

MP3について
DVDからのMP3変換について?
DVDからの動画変換について



▼自転車関係
・Panasonic CRAZY BOY

▼自動車関係
・SUZUKI エブリワゴンDA62W


▼Linux/Unix関係
・Linux基礎(パッケージ)
・Linux基礎(システム構成)
・Linux(Debian)基本コマンド
・Linuxコマンド(テキスト処理)
・Linuxコマンド(未整理)
・Linuxコマンド(ネットワーク系)
・FedoraCore OS メモ
・Debian Linux OS メモ
・Vine Linux OS メモ
・xPUD メモ

・CentOS6.4(minimal)


・solaris9 メモ
・solaris10 メモ

▼CCNA関係


▼ノートPC関連

液晶パネル

Fujitsu FMV-820MT
・Compaq Evo Notebook N110
・Panasonic Let's note CF-S51R
・Toshiba Dynabook Satellite 1800


▼デスクトップPC関連
・AOpen AX3S Pro-U
・ASUS CUSL2
・ASUS CUSL2-M


▼携帯電話
・NTT DoCoMo FOMA M1000
・FOMA P704iμ


▼モデム関連
▼ADSLモデム
・NTT ADSLモデム-NV
・NEC PA-WD605CV
・NEC PA-WD701CV
▼アナログモデム
・GVC F-1156IV/R9

▼ルータ関連
▼ルータ
・OMRON MR504DV
・FON La Fonera FON2100E
・Cisco Cisco2620
・Cisco4500M
・Cisco1601
  Cisco1603-R
  Cisco1605

・Cisco 共通メモ

・BUFFALO BLR3-TX4L
・I・O DATA NP-BBR
・NEC PA-WB7000/B (AtermWB7000H)
・マイクロ総研 NetGenesis OPT
・Persol PBR001

・YAMAHA NetVolante RTA54i
・FUJITSU NetVehicle-I

▼イーサネットコンバータ関連
・LINKSYS WET11

▼TA関連
・NEC AtermIT60D1L(S)

▼ハブ関連
・Cisco Catalyst 2924-XL-EN
・AlliedTelesis CentreCOM8216XL2
・BUFFALO LSW10/100-8
・corega FSW-5PM
・corega HUB-5PM
・CONTEC RT-1216S

▼NIC関連
・BUFFALO WLI-U2-SG54HP
・PLANEX GW-NS54GMX
・NTT-ME MN SS-LAN CARD 11 HQ

▼プリンタサーバ関連
・corega Pserver
・I・O DATA PLANT ET-FPS1E

▼デジカメ関連
・MINOLTA DiMAGE F100

▼携帯電話ケーブル関連
・BUFFALO IGM-UPDC
・OMRON ME64KTID
・OMRON ME96KTI
・SOURCENEXT SUS-USB-02 REV.1
・UP12 USB-PDC Converter
・DAISO D106

▼その他PC周辺機器
●キーボード
・Bluetoothキーボード BK3001BA
●ハンディターミナル
・ENSO BHT-6500
●ダウンスキャンコンバータ
・SC-TVEX
●CD-ROMドライブ
・NEC CD-2800D
・BUFFALO CDN-D24EX
・BUFFALO DVM-RDM16IU2
●MOドライブ
・ELECOM LMO-230-S
・FUJITSU MCF3064SS
・FUJITSU SMB-640WL2
●スピーカー
・Justy JSP-10W
●MP3プレーヤ
・SanDisk sansa e130
・NHJ V@mp VP-415
●インタフェースカード
・玄人志向 USB2.0+1394a-CB
・nbj IDE-3525
・Notebook Power Sharing
●ACアダプタ
・Universal AC Adaptor
●マウス
・Logitec Marble Mouse
・needs progres TN-30RFMOSG
●タブレット
・WACOM FAVO(ET-0405-U)
●その他
・IDEAL ME-320X(ME-320U2F)
・KY-05046S-12-H
・LifeView USB CapView
・ハードウェア(その他)
●シリアルレベルコンバータ
・シリアルレベルコンバータ


▼Windows系メモ
・DOS起動ディスク
・Microsoft OS メモ
・Microsoft 系ソフト メモ
・その他 ソフトウェアメモ
・Network Notepad
・Packet Tracerメモ
・パノラマ写真作成ソフト
・トラブル対処履歴


▼プログラミング関連
・言語比較
・VBS
・卒研事前メモ
・卒研メモ
・Windowsプログラミング
・JANコード・ISBNコード相互変換
●C言語
・文字列
・ファイル操作
●アルゴリズム
・再帰アルゴリズム
●JAVA
・Javaプログラミング
●その他
・初心者プログラミング
・ソフトウェア未整理メモ



▼家電関連
●テレビ
・SHARP AQUOS LC-20D10
・FUNAI TV-14CP
・BLUEDOT BTV-900K
・AKART AK-FTV913
・REAL LIFE JAPAN IQ-191LEDTV
AQUOS DZ3シリーズのDLNA機能
Viera V1シリーズのDLNA機能
●プロジェクタ
・crenova XPE470
●ビデオ
・FUNAI TV-14CP
●HDD&DVDレコーダ
・Toshiba RD-XS46
・NEC PK-AX10
●DVDプレーヤー
・GREEN HOUSER GH-PDV9AT
・情熱価格 DVDJ-DQ03
●メディアプレーヤー
・MINI HD MEDIA BOX 1080P
・1080P FULL HD Media Player
・1080P HD Media Player Mini 1080
・HD media player

●チューナー
・COMTEC DTW700
・HUMAX CI-S1

●アンテナ
・ADDZEST ZCP107
・マルハマ AGS-590

●ヘッドマウントディスプレイ
・VIRTUAL i/O i-glasses
●電動歯ブラシ
・ブラウン電動歯ブラシ
●電話機
・SHARP DA-C5-B
●コードレス電動ドリル、ドライバ
・BLACK&DECKER CSD300T
・RELIEF 30946?

▼カーナビ関係
Panasonic CN-GP510VD
Panasonic CN-G1100VD
▼カーステレオ関係
Kenwood U585SD

▼おもちゃ関連
●ラジコン
・ラジコンのプロポ改造


▼カー用品関連
●インダッシュTV
・ADDZEST TVS6250


▼DIY関連
・懸垂スタンド
・蓄光塗料


▼電子工作関係
・コネクタピンアサイン
・LANケーブルをAVケーブル化
・LANケーブルをRGBケーブル化
・地上デジタル放送アンテナ
・電子工作 メモ
・乾電池を充電


▼デザイン関連
●腕時計
・腕時計


▼その他

・HP製作関連メモ
・アイデアメモ

・コラム・メモ
・趣味・興味


・ToDo
・ネットインフラ?


▼資格・履歴書・マナー
・資格取得メモ
・工事担任者対策メモ
・履歴書・職務経歴書
・答辞


▼修学旅行 フランス(パリ)


▼掲示板
●掲示板
 意見・苦情・質問用に仮設置。

▼フリーエリア▼

▼おしらせ▼

管理人/副管理人のみ編集できます