• ベストアンサー

フォルダ内にあるファイル名からスペースを消したい

いつも大変参考にさせていただいています。 フォルダ内にあるファイル名から 半角スペースを一括で削除する方法を知りたいのですが、わかる方 ご教授願えますでしょうか。 フォルダ内にはファイルのみしかありません。拡張子はすべて.jpg バッチファイルを作成することでできそうだったのですが、時間切れでした。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

PowerShellスクリプトの利用を勧める先行回答がありますが、正直、バッチファイルですと冒頭部分にsetlocal enabledelayedexpansionで「環境変数の遅延展開」を宣言し、変数の囲み文字を%ではなく!にしなければなりませんし、それだけでは足りずにfor文を使ったりsetに続く置換記述全体をダブルクオートで囲ったりと、とても素直とは言えないテクニックを要しますの。故に、自分としてもバッチファイルよりも高機能で、それ自体の知識と正規表現の知識を身につけさえすればバッチファイルはずっと楽に使えるPowerShellをお勧めします。 バッチファイルの書き方につきましては、「バッチ ファイル名 スペース 取り除く」をキーワードに検索してみましたところ、最上位に近い順位でファイル名のスペースをアンダーバーに置き換えるコードが掲載されている記事を見つけましたので、必要な部分を抜粋してアンダーバーに置換する部分を空白削除に変えました。 [元記事]: Windows ファイル名の半角空白文字をアンダーバーに置き換えるバッチ http://min117.hatenablog.com/entry/2018/02/20/235606 改変後のコード http://akiba.geocities.jp/code_kaku_imaichisan_desu_2017/OKWave/Codes/Windows-CommandPrompt/q9522370.bat 同じ役割のPowerShellスクリプトも作成しました。 こちらは、入力部分にチェック機能を付けて関数にしてあります。 http://akiba.geocities.jp/code_kaku_imaichisan_desu_2017/OKWave/Codes/Windows-PowerShell/OKWave-q9522370.ps1 PowerShellスクリプトを実行するには、Set-ExecutionPolicy RemoteSignedを実行し、PowerShellの実行ポリシーを「リモートサーバー上のスクリプトには署名が必要」に変更する必要があります。実行すると、PC内にあるスクリプトは署名がなくても普通に実行できるようになります。 実行ポリシーの変更が済みましたら、ローカル環境にあるスクリプトの実行を許可してから、PowerShellコンソールウィンドウ上で&と半角スペースに続けてシングルクオートまたはダブルクオートで囲んだスクリプトのフルパスを入力し、Enterキーを押せばスクリプトが走ります。尚、スクリプトパスの前に付ける&は、Invoke-Expressionコマンドレットの代用として使われるエイリアスです。 今回回答致しました内容も含め、コーディング作業には若干の知識が必要となりますので、もし、今後も何かしらのコードを書く事に興味または関心をお持ちでしたら、都度間に合わせるのではなく基礎から学ぶ事が肝要です。 試行錯誤を重ねて時間を無駄にしてきた割には基礎知識をざっと学んだ程度のレベルしか得られなくても、その中に検索キーワードのヒントは十分ありました。検索のコツやテクニックを学ぶ事も、コードの書き方自体の知識を学ぶ事と同じかそれ以上に重要です。 今回は長文となり恐縮ですが、回答する立場の皆さんにおかれましても、無償で回答できる時間は限られてしまい、どうしても答え方が端的になりがちです。時間の許す限り、自助努力で根気強く学んでいきましょう。

gihu2018
質問者

お礼

ご返信遅くなってしまいましたが、ご回答いただきありがとうございました。

その他の回答 (4)

回答No.5

すみません、一部訂正します。 ×とても素直とは言えないテクニックを要しますの。 ○とても素直とは言えないテクニックを要します。

gihu2018
質問者

お礼

ご返信遅くなってしまいましたが、ご回答いただきありがとうございました。

  • kteds
  • ベストアンサー率42% (1882/4440)
回答No.3

win7ではPowershell が使えますので下記の4行を実行するだけでOKです。 スペースがファイル名のどこに、いくつ有っても一括で削除します。 f:\temp-folder は自分のフォルダを指定してください。 $folder="f:\temp-folder" $a=(Get-Childitem $folder).name $b=$a.replace(" " , "") $j=0;foreach($i in $a){Rename-item $folder\$i $b[$j]; $j+=1}

gihu2018
質問者

お礼

null 値の式ではメソッドを呼び出せません。 というエラーが出て先に進める事ができませんでした。。私に知識が無いため ここから先に進める事が出来ませんでした。。 回答頂きありがとうございました。

回答No.2

echo ren %1 "%2%3%4%5%6%7%8%9" ↑いきなり実行すると書き換えてしまうので、 コメントにしてますので、テストでOKだったら、実際の実行にしてちょ!

gihu2018
質問者

お礼

ご返信遅くなってしまいましたが、ご回答いただきありがとうございました。

回答No.1

@echo off for %%a in (*.jpg) do ( call :waaa "%%a" %%a ) pause exit :waaa echo ren %1 "%2%3%4%5%6%7%8%9" exit /b ------------- 超いい加減バージョン(w) MS-DOSがスペースをパラメタの区切りとするので、 逆に言えば、パラメタだけをつなげて書けば、勝手にスペースがなくなる という特性を逆に利用した、いい加減なソース! %2~%9までの制限があるので、スペースの分解数が「多い」 #スペースの数ではなく。 場合は、こいつを「もう1回やれば」さらにスペースを削除しますので、 必ずいつかは、終わりますが。 from と to が同じなら無視するなどの、基礎は抜けてるので、 質問者さんが、好き勝手に改造してみてください。 逆に言えば、「1つでも、from != to」だったら、全ループさせ 全ループで一つも見つからなければ、終わりにすれば、完成です!。

gihu2018
質問者

お礼

ご返信遅くなってしまいましたが、ご回答いただきありがとうございました。