これは簡単だと思っていましたが、思ったよりも難しいようです。
タイムスタンプを追加してファイルをコピーして貼り付けたいのですが、次のコードを使用してタイムスタンプを取得します。
set hournum=%time:~0,2%
if %hournum% gtr 9 (set timeback=_%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%h%time:~3,2%m%time:~6,2%s) else (set timeback=_%date:~10,4%%date:~4,2%%date:~7,2%_0%time:~1,1%h%time:~3,2%m%time:~6,2%s)
Set FileAffected=%1
echo %FileAffected:~0,-1%%timeback%
FILE.TXT
これにより、ファイルはFILE.TXT_2015-03-05_11h56m32s
しかし、私は明らかにそうありたいと願っていますFILE_20150305_11h56m32s.TXT
ファイル拡張子は任意の拡張子または任意の長さにすることができます。ご協力ありがとうございます。
編集: FileAffected は引用符付きで渡されるので、引用符を ~0,-1 で削除しました。
次のようにすると、次のことがわかりました。
FOR /f %%i IN (%FileAffected%) DO (
ECHO filename=%%~fi
ECHO fileextension=%%~xi
)
FileAffected を echo すると、スペースを含む完全なパス名が返されます。しかし、FOR /F コマンドを使用すると、スペースの後の部分が切り捨てられたファイル名が返されます。"IN" コマンドの "%FileAffected" 変数に引用符を追加しても、問題は解決しません。fi や xi の周囲に引用符を追加しても、問題は解決しません。
答え1
ファイル名の末尾に日付と時刻を追加するにはどうすればよいですか?
次のバッチファイルを使用します。
@echo off
set hournum=%time:~0,2%
if %hournum% gtr 9 (set timeback=_%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%h%time:~3,2%m%time:~6,2%s) else (set timeback=_%date:~10,4%%date:~4,2%%date:~7,2%_0%time:~1,1%h%time:~3,2%m%time:~6,2%s)
echo %~n1%timeback%%~x1
出力:
F:\test>test file.txt
file_3/01_18h07m40s.txt
例えばファイル名にスペースが含まれている場合はfile with space.txt
、電話"
次のように、ファイル名の前後に sが付いたバッチ ファイル:
F:\test>test "file with space.txt"
file with space_3/01_18h07m56s.txt
パラメータ拡張
%~n1
%1 を、ファイル拡張子のないファイル名 (C:\utils\MyFile) に展開します。または、パスのみが存在する場合 (末尾のバックスラッシュなし)、そのパスの最後のフォルダーに展開します。
%~x1
%1 をファイル拡張子のみに展開 - .txt
「二重引用符の使用
1 つのパラメータにスペースが含まれている場合でも、「引用符」で囲むことで 1 つの項目として渡すことができます。これは長いファイル名の場合に適しています。
次のようにパラメータを使用してファイル名を指定する場合:
MyBatch.cmd "C:\Program Files\My Data File.txt"
パラメータは次のようになります。
%0 = マイバッチ
%1 = "C:\Program Files\My Data File.txt"
参考文献
- Windows CMD コマンドラインの AZ インデックス- Windows コマンド ラインに関連するあらゆることに関する優れたリファレンス。
- パラメーター- コマンドライン引数 (またはパラメーター) は、バッチ スクリプトに渡される任意の値です。
- 構文- 文字、区切り文字、引用符をエスケープします。