質問: ファイルの名前を変更する方法-名前を削除して番号を保持する 名前とバッジ番号を含む多くのファイルの名前を変更する必要があります。ファイルは次のようになります: "john doe1234.txt"そして名前を1234.txtに変更する必要があります (新しいファイルにはバッジ番号のみが含まれている必要があります)。 また、バッジ番号は固定されていないため、3〜4個の番号を含めることができます。更新:ファイル名には、スペースで区切られた2〜3個の名前が含まれています。例:「johndoe123.txt」または「johnjuniordoe1234.txt」名前からすべての文字とスペースを削除し、数字のみを保持することを考えていましたが、powershellの知識が十分ではありません。誰かが私を助けてくれますか?
回答: ファイル名cannotには特殊文字(_/\:*?"<>|_)を含めることができますが、_%_と_!_は、_cmd.exe_の誤解を引き起こす可能性があるため、コードは絶対確実ではありません。 コードis now foolproof。_@echo off setlocal enabledelayedexpansion set "dir=your directory here" set "_output=" set "map=0123456789" pushd "%dir%" for %%a in (*.txt) do ( setlocal set "file=%%~na" 1>temp.log echo(!file! for %%b in (temp.log) do set /a len=%%~zb-2 del /f /q temp.log for /l %%a in (0 1 !len!) do ( for /f "delims=*~ eol=*" %%? in ("!file:~%%a,1!") do if "!map:%%?=!" neq "!map!" set "_output=!_output!%%?" ) ren "!file!.txt" "!_output!.txt" endlocal ) endlocal _スクリーンショット: 注:setlocalのため、最大31個のファイルしか処理できません。 私の仮定は間違っていました。setlocalとendlocalのペアがあるため、無限のファイルを処理できます。