使用cmd或vbsscript将所有单词从文本文件转换为UpperCase

时间:2017-06-05 15:37:26

标签: batch-file vbscript cmd

我有一个名为C:\ Test.txt的文本文件。我想使用cmd将文本文件中的所有单词转换为UpperCases。你能帮我吗?

我试过

@echo off
setlocal EnableDelayedExpansion
for /F "delims=" %%a in (%1) do (
   set "line=%%a"
   for %%b in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
      set "line=!line:%%b=%%b!"
   )
   echo !line!
)

但是我看不到放置test.txt文件位置的位置

4 个答案:

答案 0 :(得分:0)

将文本文件作为变量加载后,您可以循环遍历每个char     的foreach  并检查Asci值(msgbox Asc(“A”))。 如果asci代码在97和122之间(“a”和“z”),则删除32(“A”为65,“a”为97 ---->“z”为122,“Z”为90)

答案 1 :(得分:0)

你可以尝试这样的事情:

%1是第一个参数,表示 InputFile %2是第二个参数,表示 OutputFile

@echo off
set "InputFile=C:\Test.txt"
set "OuputFile=C:\UpCaseTest.txt"
If Exist "%OuputFile%" Del "%OuputFile%"
Call :Convert2UpCase "%InputFile%" "%OuputFile%"
Start "" "%OuputFile%"
Exit /b
::**********************************************************************
:Convert2UpCase <InputFile> <OutputFile>
setlocal EnableDelayedExpansion
for /F "delims=" %%a in ('Type %1') do (
   set "line=%%a"
   for %%b in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
      set "line=!line:%%b=%%b!"
   )
   echo !line!>>%2
)
::**********************************************************************

答案 2 :(得分:0)

Stephan已在comment中指出,%1构成argument reference,指向第一个命令行参数。因此,假设批处理文件名为upper-case.bat且文本文件为C:\test.txt,则必须按以下方式调用批处理文件:

upper-case.bat C:\test.txt

但是,如果您的测试文件在其路径中包含空格或特殊字符,例如C:\test file.txt,则必须将其放在引号之间,如下所示:

upper-case.bat "C:\test file.txt"

为了使您的批处理文件不失败,您必须像这样修改它以正确处理引用的参数:

@echo off
setlocal EnableDelayedExpansion
for /F "usebackq delims=" %%a in ("%~1") do (
   set "line=%%a"
   for %%b in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
      set "line=!line:%%b=%%b!"
   )
   echo(!line!
)

而不是%1我写了"%~1",它首先删除了潜在的引号(~),然后在结果周围放置引号。这样,我们总是有一对引号。要使for /F正确处理引号,以便不将引用的文件路径视为文字字符串,我添加了usebackq选项。

请注意for /F忽略空行,因此会丢失。它还忽略以分号(;)开头的行,因为它有默认的eol选项;要避免这种情况,请使用奇怪的未加引号的语法"usebackq delims="替换usebackq^ delims^=^ eol^=(您不能声明"usebackq delims= eol=",因为这会将"定义为eol字符)

为防止echo在遇到仅限空白行的情况下返回ECHO is {on|off}.,我将echo后面的 SPACE 替换为(因为这是安全返回给定字符串的唯一方法。

顺便说一下,要将输出写入另一个文本文件,请使用redirection,如下面的命令行所示:

upper-case.bat "C:\test.txt" > "C:\return.txt"

请注意您必须指定与输入文件不同的文件。

答案 3 :(得分:-1)

文件:fucase.vbs

Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile("C:\Test.txt", 1, True)

Do Until f.AtEndOfStream
  WScript.Echo UCase(f.ReadLine)
Loop

f.Close

批量(或cmd)电话:

cscript fucase.vbs