0

ファイルを自動的にバックアップし、最大 5 つのファイルを保存し、5 つのファイルのいずれかを復元するオプションを備えたプログラムを作成しています。ファイルがバックアップされると、YYYYMMDD_HHMMSS_filename.ext の形式で日付と時刻のスタンプが追加されます。ファイルを復元するには、まず日付スタンプを切り取る必要があります。ファイルの先頭の日付スタンプを切り取るために現在使用している方法は次のとおりです。

set VAR=%VAR:~16%
echo %VAR%

問題は、バックアップされたファイルが「20120825_140343_ファイル名.txt」という名前の場合、上記の方法では「ファイル」のみが返され、スペース以降が省略されます。ファイル名のスペースは、それらを使用するプログラムによって認識されるように保持する必要があります。

tl;dr 文字列 20120825_140343_file name.txt を「file name.txt」だけにカットする必要がありますが、私のメソッドは単に「file」を返します。

区切り文字または何かが役立つ場合は、日付スタンプとファイル名を別の文字で区切ることができます.IE 20120825_140343-file-name.txt

4

2 に答える 2

3

あなたの方法は、エレガントで柔軟性がありませんが、うまくいくはずです。これは、ファイル名全体をに保存していないことを示していますVAR。そのため、結果は。になり、%var:~16%結果はfileになりませんfile name.txtVAR私はあなたがどこかにこのように割り当てると仮定します:

SET VAR=%1

これを行う必要があります:

SET VAR=%1 %2

または、バッチファイルを呼び出すときにファイル名を二重引用符で囲み、次のvarように設定して引用符を削除します。

SET VAR=%~1

バッチを機能させるには、これで十分です。

================================================== ==

varただし、実際に尋ねた質問に答えるために、プレフィックス文字が16文字より多い場合でも少ない場合でも、そこから「filename.txt」を抽出する方法を紹介します。

ステートメントを使用しfor /f、区切り文字としてアンダースコアを使用して3番目のトークンを指定します。これは自己完結型の例です。(コマンドラインから実行するには、に変更%%x%xます。

SET VAR=20120825_140343_file name.txt
for /f "tokens=3 delims=_" %%x in ("%VAR%") do set VAR=%%x
ECHO %VAR%

変数にファイル名全体が含まれていることを確認するためにコードを修正しない場合、このソリューションでは問題が修正されないことを覚えておいてください。VAR

于 2012-08-28T15:41:13.447 に答える
0

これを試しましたか?

set VAR="%VAR:~16%"
于 2012-08-28T15:12:09.517 に答える