使用file的内容作为两个单独的变量

时间:2014-07-06 22:04:03

标签: loops batch-file for-loop rename

我需要做两件事......

  1. 重命名目录中的所有文本文件。每个文件都以一个单词和一个数字命名,它们之间有空格。我想从文件名中删除该号码。

    例如......

    House 21.txt -> House.txt
    
  2. 上述每个文件都与其名称具有相同的内容。它们每个都有一个单词和一个数字,它们之间有空格。我需要能够取出单词和数字并将它们保存为单独的变量。

    例如:

    Car 2     -> Set var1=Car & var2=2
    
  3. 当内容没有相同数量的字符时,我只是不知道从文件中删除相应信息的正确方法。如果我所要做的就是删除最后5个字符,我可以做这样的事情:

    @echo off
    setlocal enabledelayedexpansion
    for %%a in (*.TXT) do (
       set oldName=%%a
       set newName=!oldName:~0,-5!
       echo !newName!>!newName!.txt
    )
    

    但每个文件的长度不同,只删除5个字符对那些需要6个或更多的文件不起作用。有人能指出我正确的方向吗?

2 个答案:

答案 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后,您可以使用它们执行所需操作。你可以设置一个环境变量......,无论如何。