0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Windowsバッチ(.bat)学習メモ 文字列加工(for 環境変数以外)

Posted at

前提

これらのオプションは、環境変数に対して使用することができない。
使用可能な対象は、引数(%1、%2など)、またはfor文内で使用するメタ変数(%%aなど)のみであるため、基本的には無理矢理for文内変数へ格納することが必要となる。


~:引用句(")を削除して展開

@echo off

set txtFile="sample.txt"

for %%a in (%tgtFile%) do echo %%~a
実行結果
sample.txt

~f:ファイル名からフルパスへ展開

※C:\【 実験 】\例\sample.txt、とする

@echo off

cd "C:\【 実験 】\例"

set txtFile="sample.txt"

for %%a in (%tgtFile%) do echo %%~fa
実行結果
C:\【 実験 】\例\sample.txt

~d:ファイル名のフルパスから、ドライブ文字だけを展開

@echo off

set txtFile="C:\【 実験 】\例\sample.txt"

for %%a in (%tgtFile%) do echo %%~da
実行結果
C:

~p:ファイル名のフルパスから、パス名だけを展開

@echo off

set txtFile="C:\【 実験 】\例\sample.txt"

for %%a in (%tgtFile%) do echo %%~pa
実行結果
\【 実験 】\例\

~n:ファイル名のみを展開

@echo off

set txtFile="C:\【 実験 】\例\sample.txt"

for %%a in (%tgtFile%) do echo %%~na
実行結果
sample.txt

~x:ファイル名の拡張子のみを展開

@echo off

set txtFile="C:\【 実験 】\例\sample.txt"

for %%a in (%tgtFile%) do echo %%~xa
実行結果
.txt

~s:ファイル名以外のパス(短縮名)を展開

短縮名とは?

8.3形式という命名規則に従って作成された名前のこと。
最大8文字(ファイルの場合は追加で拡張子部が最大3文字)という、かなりの制限が求められる形式であり、MS-DOS・Windows3.1といった古いOSで採用されていた命名規則となる。
Windows95以降はファイル名が250文字まで設定可となったことで影は薄れたが、互換性のため今でも秘密裡にこの形式のファイル名も生成されるようになっているらしい。
(例:C:\Program Files=C:\PROGRA~1。これはエクスプローラなどでも問題なく動作する)

短縮名の取得

基本はdir /xで取得する。
findにおいては、/sで変換が可能。
※存在しないパスなどでは、短縮名が生成されていないため効力が発揮されない。注意

短縮名の使用

8.3形式のファイル名が必要になるケースとしては、
・古いアプリを利用する時
・cmd上で他プログラムを起動する際、空白文字を含む長いファイル名ではうまく動作しない
などが考えられる。
スペースを含んでいるパスに対し、エスケープ文字の仕様や""での囲みといった、様々な策を弄しても失敗するというような場合、これを利用するのが吉のよう。
(というか最初からこちらで良い気がする)

@echo off

set txtFile="C:\新しいフォルダー\新しいフォルダー\新しいフォルダー\asdfghjklqwertyuiopzxcvbnm.txt"

for %%a in (%tgtFile%) do echo %%~sa
実行結果
C:\temp\新しい~1\新しい~1\新しい~1\ASDFGH~1.TXT

~a:ファイルの属性を展開

アルファベットに対応するファイル属性

d:ディレクトリ
r:読み取り専用
h:隠しファイル
s:システムファイル
a:アーカイブファイル

@echo off

set directory="C:\新しいフォルダー"
for %%a in (%directory%) do echo %%~aa

set txtFile="C:\新しいフォルダー\asdfghjklqwertyuiopzxcvbnm.txt"
for %%a in (%tgtFile%) do echo %%~aa
実行結果
d---------
--a--------

~t:ファイルのタイムスタンプを展開

@echo off

set directory="C:\新しいフォルダー"

for %%a in (%directory%) do echo %%~ta
実行結果
yyyy/mm/dd hh:mm

~z:ファイルサイズを展開

※KB・MB・GBなどではなく、バイト単位で表示されることに注意

@echo off

set directory="C:\新しいフォルダー\FAQ.txt"

for %%a in (%directory%) do echo %%~za
実行結果
nnnnn

※捕捉

ディレクトリを対象としても、基本は0になる。
ディレクトリ内のファイルの合計サイズを取得したい場合は、dirを使用する。
リンク先参照。

ディレクトリ内のファイルの合計サイズの取得方法

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?