起初:这不是一个重复的问题(我希望)。我搜索了很多,发现How to find files with no file extension in directory tree with a batch file?和Find and rename files with no extension?等等,但我有一个“小”的额外问题。
我正在尝试在Windows 10上重命名多个(数千个)jpg文件。名称格式为“Name(ABC).jpg”或“Multiple Names(ABC).jpg”。我需要“Some Name.jpg”。
你有什么尝试?这么多东西,没有一个是真正的解决方案,直到这个:
for /f "tokens=1-3 delims=)(" %%a in ('dir /b *.jpg') do @rename "%%a(%%b)%%c" "%%a"
for /R %%x in (*.) do ren "%%x" *.png
适用于大多数文件,,除非名称中有一个点。如果名称类似于“A Name.Supercool(ABC).jpg”,它将只是“A Name.Supercool”,没有扩展名。
我知道问题在于(*。),只是不知道如何解决......
答案 0 :(得分:1)
您的问题是将文件重命名为“%% a”会产生“A Name.Supercool” - 并且“没有扩展名”。
啊,但确实如此。文件名为“A Name”,扩展名为“.Supercool”如果您将文件重命名为“%% a %% c”,则名称将变为“A Name.Supercool.jpg”。
现在,为什么在尝试将文件重命名为无扩展名后,您将其重命名为*.png
我不知道,不幸的是,您没有解释。为什么不简单地将.png
添加到%%a
- 如果这真的是你想要做的那样?
(顺便说一句 - for /f ... dir...
方法构建文件的内存列表,然后重命名它们,这样就不会像for %%x in (*.jpg)...
那样重新处理它们。
鉴于终端空间名称问题,
for /f "tokens=1-3 delims=)(" %%a in ('dir /b *.jpg') do rename "%%a(%%b)%%c" "%%a%%c"
SETLOCAL enabledelayedexpansion
for /f "delims=" %%a in ('dir /b "* .jpg"') do (
SET "name=%%a"
REN "%%a" "!name:~0,-5!.jpg"
)
endlocal
答案 1 :(得分:1)
Magoo的答案更接近我的要求,但文件名中的特殊字符存在问题。 TessellatingHeckler发布了最好的方法作为评论,所以在这里。批处理文件:
[TestMethod]
public void TestMethod(){
var groupId = "ABC";
var personId = 1;
ver personInfo = new PersonInfo()
{
Id = personId,
FirstName = "Sam",
LastName = "Smith"
}
var groupStub = new Mock<IGroupRepository>;
groupStub.Setup(x=> x.GetById(groupId)).Returns(new Group(){
Id = groupId,
Persons = List<Person>()
{
new Person()
{
Id = personId,
FirstName = "George",
LastName = "Bolton",
}
}
}
});
var myClass = new MyClass();
myClass.Execute(personInfo, groupId);
var group = groupStub.GetById(groupId);
var person = group.Persons.First(p=> p.Id == personId);
Assert.AreEqual(personInfo.FirstName, person.FirstName);
}
有了这个,我可以立刻处理.jpg和.png,完美无缺。谢谢大家。