別の問題が派生しました。
何度かやった後 見てみると
拡張子が重なってました。
.jpg.htm.htm という拡張子を
.htm に変更するにはどうしたらいいでしょうか?
どなたか助けてください。お願いします。
@echo off
setlocal enabledelayedexpansion
for %%i in (*.htm) do (
set j=%%i
set j=!j:~0,70!
ren "%%i" "!j!.htm"
)
では .htm が増えるだけ
@echo off
setlocal enabledelayedexpansion
for %%i in (*.htm.htm.htm) do (
set j=%%i
set k=!j:~0,-12!
set l=!j:~0,70!
ren "!k!.htm.htm.htm" "!k:~0,70!.htm"
rem "%%i" "!l!.htm"
rem "!k!.files" "!k:~0,70!.files"
)
で .htm.htm.htm を .htm に修正できた
@echo off
setlocal enabledelayedexpansion
for %%i in (*.jpg.htm.htm) do (
set j=%%i
set k=!j:~0,-12!
set l=!j:~0,70!
ren "!k!.htm.htm.htm" "!k:~0,70!.htm"
rem "%%i" "!l!.htm"
rem "!k!.files" "!k:~0,70!.files"
)
で .jpg.htm.htm を .htm に修正できそう
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13164257078
保存したwebサイトの名前を短縮するバッチを教えてください。
webサイトを名前をつけて保存したのですが、(保存の際に勝手に名前がついてきます)
別のフォルダーにコピーしようとすると名前が長すぎるものはコピーできません。
名前を70文字までにすればコピーできそうです。
拡張子はそのままで、
タイトルだけ頭から70文字だけ採用してそれを新しい名前にするバッチを教えてください。
補足
長すぎるファイル名を百文字にリネームするバッチを教えてください。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1015043423...
にコードが載っていましたが、私の用途にはどう変更したら使えるようになるでしょうか?
@echo off
setlocal enabledelayedexpansion
for %%i in (*.html) do (
set j=%%i
set j=!j:~0,70!
ren "%%i" "!j!.html"
)
==========
拡張子が*.htmlの場合です。
違う拡張子に対応させるには,".html"(2か所)を変更して下さい。
@echo off
setlocal enabledelayedexpansion
for %%i in (*.files) do (
set j=%%i
set j=!j:~0,70!
ren "%%i" "!j!.files"
)
@echo off
setlocal enabledelayedexpansion
for %%i in (*.html) do (
set j=%%i
set k=!j:~0,-5!
set l=!j:~0,70!
ren "%%i" "!l!.html"
ren "!k!_files" "!k:~0,70!_files"
)
==========
テストで70字は大きいので,3字分切り出しでテストしました。
1234567890.htmlと1234567890_files
をそれぞれ
123.htmlと123_files
に変更させることができました。
上に貼ったものは3字を70字に直してあるのでそのまま使えます。
set k=!j:~0,-5!
の5は,拡張子の文字数+1から来ています。
望む動作と違うことをしていたらごめんなさい
1234567890.htmlのファイルと
1234567890_filesのフォルダーが
同じところに置いてあるフォルダー内に
バッチファイルを置いて
それを右クリックして、管理者として実行すればよろしいのでしょうか?
1234567890.htmlは名前を短くできたのですが、
1234567890_filesのフォルダーの名前は短くすることができませんでした。
何が悪いのでしょうか?
自分の環境だと管理者として実行するとうまく動きませんでした
(そのままダブルクリックだと正しく動きます)
@echo off
を消してコマンドプロンプトから呼び出して,エラーが表示されたら原因がわかるかもしれません。
同じディレクトリに以下のコードをcmd.batなどの適当な名前で保存し,ダブルクリックでコマンドプロンプトを起動できます
(勝手にカレントディレクトリを移動するので確認がしやすいです。
他の方法で起動し,cdコマンドで移動してもOKです。)
==========
@title コマンドプロンプト
@cmd.exe /k cd /d %~dp0
アドバイス大変ありがとうございます。
解像度的に「ファイルが見つかりません」ぐらいしか判別できませんでした。
エラーメッセージの直前のコマンドに書いてあるファイルが存在するか確認してみてください。
下記はコマンドプロンプトの内容です。
C:\Users\Z97A1H\Documents\新しいフォルダー>C:\Users\Z97A1H\Documents\新しいフォ
ルダー\htmタイトル短縮ソフト.bat
C:\Users\Z97A1H\Documents\新しいフォルダー>rem @echo off
C:\Users\Z97A1H\Documents\新しいフォルダー>setlocal enabledelayedexpansion
C:\Users\Z97A1H\Documents\新しいフォルダー>for %i in (*.htm) do (
set j=%i
set k=!j:~0,-5!
set l=!j:~0,70!
ren "%i" "!l!.htm"
ren "!k!_files" "!k:~0,70!_files"
)
C:\Users\Z97A1H\Documents\新しいフォルダー>(
set j=Pc-d009m Tower Model Computer Computers Case Opening Bare Frame - Buy .htm
set k=!j:~0,-5!
set l=!j:~0,70!
ren "Pc-d009m Tower Model Computer Computers Case Opening Bare Frame - Buy .htm
" "!l!.htm"
ren "!k!_files" "!k:~0,70!_files"
)
指定されたファイルが見つかりません。
C:\Users\Z97A1H\Documents\新しいフォルダー>
@echo off
setlocal enabledelayedexpansion
for %%i in (*.htm) do (
set j=%%i
set k=!j:~0,-4!
set l=!j:~0,70!
ren "%%i" "!l!.html"
ren "!k!_files" "!k:~0,70!_files"
)
==========
*.htm版です。
set k=!j:~0,-5!の数字の説明不足でした。
拡張子の文字数に合わせないといけないのでエラーになっていました。
両方(*htm,*html)に対応↓
==========
@echo off
setlocal enabledelayedexpansion
for %%i in (*.htm) do (
set j=%%i
set k=!j:~0,-4!
set l=!j:~0,70!
ren "%%i" "!l!.html"
ren "!k!_files" "!k:~0,70!_files"
)
for %%i in (*.html) do (
set j=%%i
set k=!j:~0,-5!
set l=!j:~0,70!
ren "%%i" "!l!.html"
ren "!k!_files" "!k:~0,70!_files"
)
訂正
==========
@echo off
setlocal enabledelayedexpansion
for %%i in (*.htm) do (
set j=%%i
set k=!j:~0,-4!
set l=!j:~0,70!
ren "%%i" "!l!.htm"
ren "!k!_files" "!k:~0,70!_files"
)
for %%i in (*.html) do (
set j=%%i
set k=!j:~0,-5!
set l=!j:~0,70!
ren "%%i" "!l!.html"
ren "!k!_files" "!k:~0,70!_files"
)
==========
間違えていました。
すみません
@echo off
setlocal enabledelayedexpansion
for %%i in (*.htm) do (
set j=%%i
set k=!j:~0,-4!
set l=!j:~0,70!
ren "%%i" "!l!.htm"
ren "!k!_files" "!k:~0,70!_files"
)
for %%i in (*.html) do (
set j=%%i
set k=!j:~0,-5!
set l=!j:~0,70!
ren "%%i" "!l!.html"
ren "!k!_files" "!k:~0,70!_files"
)
for %%i in (*.files) do (
set j=%%i
set k=!j:~0,-5!
set l=!j:~0,70!
ren "%%i" "!l!.html"
ren "!k!_files" "!k:~0,70!.files"
)
①
フォルダーの中のファイルを精査したところ
_files で終わるものと
.files で終わるものとが混在していることが分かりました。
.files で終わるものもリネームが必要になりました。
②
1234567890.htmlのファイルと
1234567890_filesまたは1234567890.filesのフォルダーは
常にセットとして作られているわけではなく
1234567890.htmlのファイルだけのものもありますが
セットとして存在してなくてもいいのでしょうか?
単独でもリネームできるのでしょうか?
③
1234567890_filesまたは1234567890.filesのフォルダーの中にある
いろんな拡張子のファイルも同時に短くするにはどうしたらいいのでしょうか?
これはあまり数がないのでいままでは諦めていましたので、
だめでもしかたないのですが。
①
ren "!k!_files" "!k:~0,70!_files"
の下に
ren "!k!_files" "!k:~0,70!.files"
を足してください。
②
本来は(コマンドプロンプトから呼ぶと)エラーが表示されますが,バッチをダブルクリックで呼ぶ際は瞬きしている間に消えるので気にしないでいいです。
③
様々な拡張子に対応するバッチは,何かできそうなんですが思いつけませんでした(拡張子の文字数が一定ならできるのですが…)
力及ばず申し訳ございません
すみません。どうしてもうまくいきません。
1234567890.filesのタイプのフォルダーの名前だけを
狙い撃ちで短くしたい時はどうしたらいいでしょうか。
教えていただいたコードを使いましたがうまくいきません。
@echo off
setlocal enabledelayedexpansion
for %%i in (*.files) do (
set j=%%i
set j=!j:~0,70!
ren "%%i" "!j!.files"
)
でもだめで
@echo off
setlocal enabledelayedexpansion
for %%i in (*.files) do (
set j=%%i
set k=!j:~0,-5!
set l=!j:~0,70!
ren "%%i" "!l!.html"
ren "!k!_files" "!k:~0,70!.files"
)
でもだめでした。
set k=!j:~0,-6!
だと思います。
ごめんなさい
間違えてました
==========
@echo off
setlocal enabledelayedexpansion
for %%i in (*.htm) do (
set j=%%i
set k=!j:~0,-4!
set l=!j:~0,70!
ren "%%i" "!l!.htm"
ren "!k!_files" "!k:~0,70!_files"
ren "!k!.files" "!k:~0,70!.files"
)
for %%i in (*.html) do (
set j=%%i
set k=!j:~0,-5!
set l=!j:~0,70!
ren "%%i" "!l!.html"
ren "!k!_files" "!k:~0,70!_files"
ren "!k!.files" "!k:~0,70!.files"
)
==========
ごくごく単純なミスでした
何度も申し訳ありません
別の問題が派生しました。
何度かやった後 見てみると
拡張子が重なってました。
.jpg.htm.htm という拡張子を
.htm に変更するにはどうしたらいいでしょうか?
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10150434230
長すぎるファイル名を百文字にリネームするバッチを教えてください。ただし拡張子はそのまま残す事とします。
あるフォルダ(サブフォルダを含む)にファイル名が長いファイルが大量にあります。
フォルダ内の全ての100文字を越えるファイル名を先頭から100文字だけのファイル名にリネームするバッチを教えてください。
別の言い方をすると、拡張子はそのままで、全ての100文字を越えるファイル名の101文字以降を削除するバッチとも言う事ができます。
【背景】
ネットサイトのショートカットをフォルダに作成していました。
拡張子はエクスプローラー上では表示されていませんが、xxx.URL のようです。
ネットサイト名には100文字を越えるようなものがよくあり、気がつくとそのようなファイルがたくさんできていました。これらのファイルを、例えば、別のフォルダに移動した場合、フォルダのパス名が長いと、パス名+ファイル名の文字数の制限を越えてしまう危険があります。
そこで、バッチファイルで、 一気に全ての
(100文字越えのファイル名).URL を、
(100文字のファイル名).URL に、一律に揃えたく思いました。
できれば時々バッチファイルを実行して、そのフォルダ内の長すぎるファイル名を100文字に揃えたいと思っています。
どうぞよろしくお願いいたします。
- 閲覧数:279 回答数:1 お礼:500枚
同じディレクトリにある前提で。
inDiにディレクトリ名を入れてください。
(現在はバッチと同ディレクトリにある「test」フォルダを参照するようになって射ます。
――――――――――――――ここから―――――――――――――――
@echo off
setlocal enabledelayedexpansion
rem 対象ディレクトリ
set inDi=%~dp0test\
rem 頭から残す文字数
set /a wordCnt=100
echo 対象フォルダ : %inDi%
echo ファイルの先頭から削除する文字数 : %wordCnt%
rem ディレクトリ移動
pushd %inDi%
for /f "usebackq delims=" %%f in (`dir /b /a-d`) do (
rem dir /b /a-d で取得したファイル名リストから一行を参照、そのファイル名と拡張子を取得
set fileName=%%~nf
set Ext=%%~xf
rem 先頭から%wordCnt%文字分だけ削除したものをnewFileNameに。
set newFileName=!fileName:~0,%wordCnt%!
echo 対象ファイル : !fileName!!Ext!
echo リネーム後 : !newFileName!!Ext!
rem 名前を変更します。
ren "!fileName!!Ext!" "!newFileName!!Ext!"
echo ------------
)
echo 完了しました。
pause
exit
――――――――――――――ここまで―――――――――――――――
以上。何か改善点補足等がありましたら気軽に返信ください
教えていただき、どうもありがとうございました!
100文字を越えるインターネット ショートカット (.URL)ファイルを用意してテストしてみた所、うまく動作したようですので、バッチプログラムを勉強するのにも是非参考にさせていただきます。
なお、実際のフォルダには、質問にも書きましたようにサブフォルダがあります。フォルダの最下層のサブフォルダまで、一気にバッチで変更する事は難しいでしょうか?
もしよろしければ、教えていただければ助かります。
質問した人からのコメント 2015/9/23 23:04:37
前回と同じ結果が得られ、対応するログファイルもできました!
ログフィルは自分が思ってたよりお手間をおかけしまって大変恐縮です。
リダイレクトかな?と思ったのですが、今回のような方法なら自分ではできなかったので、教えていただけて本当に助かりました。
また記号やunicode文字についてのコメントも参考になりました。そういう事なんですね。
ほんとうに、何から何までありがとうございました!
@echo off
setlocal enabledelayedexpansion
for %%i in (*.mp4) do (
set j=%%i
set l=!j:~0,70!
ren "%%i" "!l!.mp4"
)