在批处理文件中的Set命令中使用通配符

时间:2014-01-15 17:22:36

标签: batch-file

好的我试图从我正在使用此脚本的文件中删除前两个字符。

@echo off
Set "InputFile=C:\New Folder\test.txt"
Set "OutputFile=C:\New Folder\New\test.txt"

setLocal EnableDelayedExpansion > "%OutputFile%"

for /f "usebackq tokens=* delims= " %%a in ("%InputFile%") do (
set s=%%a
>> "%OutputFile%" echo.!s:~2!
)

如果我使用正确的名称,那就完美了。我需要做的是使用一个狂野的字符,因为每次文件的名称都不同。尝试这个时它不起作用。

@echo off
Set "InputFile=C:\New Folder\H*.txt"
Set "OutputFile=C:\New Folder\New\H*.txt"

setLocal EnableDelayedExpansion > "%OutputFile%"

for /f "usebackq tokens=* delims= " %%a in ("%InputFile%") do (
set s=%%a
>> "%OutputFile%" echo.!s:~2!
)

2 个答案:

答案 0 :(得分:0)

来自

I'd like to use a wildcard with the SET command in Windows Batch so I don't have to know exactly what is in the string in order to match it

  

星号是一个通配符,将匹配多个字符,但是   将仅从字符串的最开头匹配所有内容。不   在中间,而不是从结束。

     

有用的搜索:

     

* X
  *你好吗?上述两个搜索可以匹配。第一个将匹配所有内容,包括它运行的第一个“x”。   第二个将匹配包括第一个在内的所有内容   “你好吗?”它找到了。

     

合法但无用的搜索:

     

x * Hello * One 3以上三次搜索永远不会匹配。   奇怪的是,它们也是合法的,不会造成任何错误。一个例外:   你好和x *将自己匹配,但只有它们是真的   字符串的开头。 (谢谢杰布!)

答案 1 :(得分:0)

周围的for - 循环执行通配符处理(提供完全限定的文件名)

@echo off
for /f %%i in ('dir /b C:\New Folder\H*.*') do (
 echo processing %%i

  Set "InputFile=C:\New Folder\%%i"
  Set "OutputFile=C:\New Folder\New\%%i"

  setLocal EnableDelayedExpansion > "%OutputFile%"

  for /f "usebackq tokens=* delims= " %%a in ("%InputFile%") do (
    set s=%%a
    >> "%OutputFile%" echo.!s:~2!
  )
  endlocal
)

注意:如果这些文件中有多行,则会从每行* 中删除前两个字符