私はWindowsのcmdを操作していて、ループ内で変数を設定しようとしています。CMDがループ内で変数を設定しようとしています
for /d %%a in ("F:\backup*") do set folder=%%a
ECHO %folder%
PAUSE
私はドライブFの「バックアップ」で始まる名前のフォルダを探し、%フォルダ%変数にそのフォルダの名前を保存する:ここで私が持っているコードです。たとえば、フォルダが "backup 2017-01-18"と呼ばれる場合、私はそれをvarに保存したいと思います。
代わりに、ECHOが "ECHOがオン"であることを印刷するだけで何も設定されていないようです。 forループは正しいですし、フォルダもそこにあります(私はすでにrobocopyを使って他のバッチにそのコードを使用しています)。
私は理論的にはFORループの中にすべてのコードを入れ、%folder%varの代わりに%% aを使用することができますが、これはハックな解決策のようです。
私が今までに見つけたすべての解決策は、EnableDelayedExpansionを使用していました。
Setlocal EnableDelayedExpansion
for /d %%a in ("F:\backup*") do set folder=%%a
ECHO !folder!
PAUSE
しかし、今ではECHOが "!folder!"を印刷します。あたかも変数を検出しないかのように。私がECHO%フォルダに戻すと、私は再び "ECHOがオン"であることを知ります。
編集: ここで問題が見つかりました。私はまた、バックアップフォルダに別のバッチファイルを実行していました。 ROBOCOPY(私がそのバッチで使用した)は、(コピーされたファイルが隠されていなくてもシステムo_0であっても)囲みフォルダをhidden、system、readonlyに設定していることが判明しました。ディレクトリのHSR属性を削除すると、ここに投稿されたコードが正常に動作するようになりました(初期バージョン)。
です:
はこれで
for /D
ループを置き換え、また、隠したり、システムディレクトリを検出するには?あなたの最初のコードセットは、それだけでうまく動作します。 – Squashmanいいえ、これは手動で実行するバッチファイル全体です。 – ilozen
その後、F:\ backup *は存在しません。 – Squashman