我需要做两件事......
重命名目录中的所有文本文件。每个文件都以一个单词和一个数字命名,它们之间有空格。我想从文件名中删除该号码。
例如......
House 21.txt -> House.txt
上述每个文件都与其名称具有相同的内容。它们每个都有一个单词和一个数字,它们之间有空格。我需要能够取出单词和数字并将它们保存为单独的变量。
例如:
Car 2 -> Set var1=Car & var2=2
当内容没有相同数量的字符时,我只是不知道从文件中删除相应信息的正确方法。如果我所要做的就是删除最后5个字符,我可以做这样的事情:
@echo off
setlocal enabledelayedexpansion
for %%a in (*.TXT) do (
set oldName=%%a
set newName=!oldName:~0,-5!
echo !newName!>!newName!.txt
)
但每个文件的长度不同,只删除5个字符对那些需要6个或更多的文件不起作用。有人能指出我正确的方向吗?
答案 0 :(得分:1)
一种方法:
@echo off
setlocal enabledelayedexpansion
for %%a in (*.txt) do call:treat "%%~na"
exit/b
:treat
set count=1
for %%b in (%~1) do (
set $var!count!=%%b
set /a count+=1)
echo !$var1! - !$var2!
echo ren "%~1%.txt" !$var1!.txt
pause
这将在每次迭代$var1
和$var2
中创建,然后您可以将%1
重命名为!$var1!
。
如果输出正确,只需删除回声即可。
答案 1 :(得分:0)
你有两个不相关的问题。
第1部分 - 重命名文件
如果目录中的所有.txt文件都匹配" * * .txt"要重命名,然后您可以执行以下操作:
:: Preserve any existing files that have no extension
ren *. *.preserve
:: Strip off everything from the space onward
ren "* *.txt" "* "
:: Restore the .txt extension
ren *. *.txt
:: Restore the files with no extension
ren *.preserve *.
此解决方案有4个步骤,但它可以批量运行,因此可以非常快速地重命名很多文件。
请参阅How does the Windows RENAME command interpret wildcards?以获取有关上述工作原理的帮助
以上内容还将重命名文件,如" word1 word2 45.txt"或" word1 word2.txt"。您可以使用以下脚本更具体。
@echo off
for /f "delims=" %%F in (
'dir /b /a-d "* *.txt"^|findstr /ric:"^[^ ][^ ]* [0-9][0-9]*\.txt$"
) do for /f %%A in ("%%F") do ren "%%F" "%%A.txt"
这第二个解决方案非常准确,但它必须迭代每个文件,因此如果有大量文件,它会更慢。
第2部分 - 捕获两个变量中每行的内容
@echo off
for /f "usebackq tokens=1,2" %%A in ("house 21.txt") do (
echo the word = %%A
echo the number = %%B
)
将行解析为FOR变量%%A
和%%B
后,您可以使用它们执行所需操作。你可以设置一个环境变量......,无论如何。