3

次のようなコマンド ラインを使用していforfilesます (Windows 7 x64):

forfiles /P "C:\root" /M "*.txt" /C "cmd /C echo @relpath"

@relpath(現在反復されているアイテムへの相対パス)の置換をエスケープして、@relpath文字通り出力を取得するにはどうすればよいですか? (...または他の@変数?)


これまでのところ、成功せずに次のことを試しました。

  • \: は@前に処理されているように見える\ため、\@relpath機能しません。むしろ、展開された出力の前に\;が付いています。
  • ^: を述べても、が消える^@以外は何の効果もありません。^書き込ん^^@でも役に立ちません^。その場合、展開された出力に残ります。
  • 0xHH: 驚くべきことに (私には)、forfiles16 進数の特定の置換も機能0x40しません。これは、変数の解析の前に行われるようです。
  • @@: 2 倍にすると、文字通り@最初の値が保持されます。@
4

2 に答える 2

3

遅延拡張を使用できます

forfiles /P "C:\temp" /M "st*.txt" /C "cmd /v:on /C set r=0x40 & echo !r:~0,1!relpath"

または、パーセント展開を使用できます。

set percent=%
set at=@
forfiles /P "C:\temp" /M "st*.txt" /C "cmd /C echo %percent%at%percent%relpath"
于 2015-09-04T16:26:22.010 に答える
2

さらに簡単な方法を見つけました:

forfiles /P "C:\root" /M "*.txt" /C "cmd /C echo @^relpath"

記号の^ に注意してください。@

于 2015-09-04T17:16:10.357 に答える