destl変数を使用する前に大文字に変更するにはどうすればよいですか?私はある種のキャラクターの入れ替えを想定していますが、機能させることができませんでした。コードは次のとおりです-
@echo off
echo.
set /P "destf=Enter First Name: "
set /P "destl=Enter Last Name: "
set "findest=Z:\ProjectIT\copy\%destl%, %destf%"
robocopy Z:\ProjectIT\copy\test "%findest%" /e /NFL /NDL /NJH /NJS
robocopy Z:\ProjectIT\copy\Construction "%findest%"\1-BLANK-%destl% /e /NFL /NDL /NJH /NJS"
echo Construction folder has been created for "%destl%"
echo.
pause
私は次のようなものを呼び出そうとしましたが、それを機能させることができませんでした-
:Uppercase
set %~1=!%1:a=A!
set %~1=!%1:b=B!
set %~1=!%1:c=C!
set %~1=!%1:d=D!
set %~1=!%1:e=E!
set %~1=!%1:f=F!
set %~1=!%1:g=G!
set %~1=!%1:h=H!
set %~1=!%1:i=I!
set %~1=!%1:j=J!
set %~1=!%1:k=K!
set %~1=!%1:l=L!
set %~1=!%1:m=M!
set %~1=!%1:n=N!
set %~1=!%1:o=O!
set %~1=!%1:p=P!
set %~1=!%1:q=Q!
set %~1=!%1:r=R!
set %~1=!%1:s=S!
set %~1=!%1:t=T!
set %~1=!%1:u=U!
set %~1=!%1:v=V!
set %~1=!%1:w=W!
set %~1=!%1:x=X!
set %~1=!%1:y=Y!
set %~1=!%1:z=Z!
大まかなコードについては申し訳ありません-私はこれにかなり慣れていません。
よろしく、
ジョシュア
最短の方法(サードパーティのダウンロードを必要としない)は、PowerShellを使用することです。
set "str=The quick brown fox"
for /f "usebackq delims=" %%I in (`powershell "\"%str%\".toUpper()"`) do set "upper=%%~I"
より高速な方法ですが、純粋なバッチソリューションよりも使用するコードが少ない場合は、WSHを使用することになります。
@if (@CodeSection == @Batch) @then
@echo off & setlocal
set "str=The quick brown fox"
for /f "delims=" %%I in ('cscript /nologo /e:JScript "%~f0" "%str%"') do set "upper=%%~I"
set upper
goto :EOF
@end // end Batch / begin JScript hybrid
WSH.Echo(WSH.Arguments(0).toUpperCase());
そしてもちろん、どちらの関数も簡単に作成できるため、必要に応じて複数回call
できます。
@if (@CodeSection == @Batch) @then
@echo off & setlocal
call :toUpper upper1 "The quick brown fox"
call :toUpper upper2 "jumps over the lazy dog."
set upper
goto :EOF
:toUpper <return_var> <str>
for /f "delims=" %%I in ('cscript /nologo /e:JScript "%~f0" "%~2"') do set "%~1=%%~I"
goto :EOF
@end // end Batch / begin JScript hybrid
WSH.Echo(WSH.Arguments(0).toUpperCase());
または、本当にハックしたい場合は、tree
コマンドのエラーメッセージを次のように悪用することができます。
@echo off & setlocal
set upper=
set "str=Make me all uppercase!"
for /f "skip=2 delims=" %%I in ('tree "\%str%"') do if not defined upper set "upper=%%~I"
set "upper=%upper:~3%"
echo %upper%
回答の人たちに感謝し、私はこれを使ってそれを解決しました-
if not defined %~1 EXIT /b
for %%a in ("a=A" "b=B" "c=C" "d=D" "e=E" "f=F" "g=G" "h=H" "i=I"
"j=J" "k=K" "l=L" "m=M" "n=N" "o=O" "p=P" "q=Q" "r=R"
"s=S" "t=T" "u=U" "v=V" "w=W" "x=X" "y=Y" "z=Z" "ä=Ä"
"ö=Ö" "ü=Ü") do (
call set %~1=%%%~1:%%~a%%
)
EXIT /b
あなたの反応ははるかにすっきりとして効率的だと思いますが、私がうまくやっていて、何も壊したくないので、そのままにしておきます!
ご入力ありがとうございます!
@ECHO Off
SETLOCAL
SET "betabet=abcdefghijklmnopqrstuvwxyz1234567890!*$^&^^+=-\^|^>;'.,/?^<"
ECHO %betabet%
>u:\betabet.file ECHO %betabet%
CALL :upper betabet
ECHO %betabet%
CALL :upcase u:\betabet.file
GOTO :EOF
:upper
FOR %%a 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 CALL SET "%1=%%%1:%%a=%%a%%%"
GOTO :EOF
:upcase
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!
)
endlocal
GOTO :eof
上記のバッチで示されているように、 Windowsバッチファイルがテキストファイルを読み取り、すべて大文字に変換する でAaciniが参照する方法は、一部の文字で失敗します。
このバッチは、問題の文字列に特定の文字(%:
など)が含まれている場合も失敗します。アルファベットは変換されますが、%
と:
は削除されます。
上記のバッチは、最初にその他の文字を含む文字列を確立して表示し、ファイルとして保存してから、:upper
を使用して変換します。
比較のために、ファイルは:upcase
関数(リンクされた応答から派生)を使用して処理されます。
Aaciniの有効なコメントとさらなる調査に続いて、ここにいくつかの手法があります(「read-from-file」メソッドのデモを含む)。
:showline
ルーチンは、line
をdelayedexpansionモードで表示することによりコードを短縮するために存在します
@ECHO Off
SETLOCAL
set "line=abcdefghijklmnopqrstuvwxyz1234567890|!#$%%&/\()=?<>,;.:"'_-+*~^^[]{}"
SETLOCAL enabledelayedexpansion
>u:\betabet.file ECHO "!line!"
endlocal
CALL :showline
ECHO --- show conversion using "upper - caret disappears
CALL :upper line
CALL :showline
ECHO ------------------------------
ECHO --- show actual file contents ^& data read from file
type u:\betabet.file
CALL :upcase u:\betabet.file
ECHO ------------------------------
set "line=abcdefghijklmnopqrstuvwxyz1234567890|!#$%%&/\()=?<>,;.:"'_-+*~^^[]{}"
CALL :showline
ECHO --- show conversion using "inline-conversion - caret PRESERVED
setlocal ENABLEDELAYEDEXPANSION
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!" ^<--- in inline conversion
endlocal&SET "line=%line:^=^^%"
CALL :showline
ECHO ------------------------------
set "line=abcdefghijklmnopqrstuvwxyz1234567890|!#$%%&/\()=?<>,;.:"'_-+*~^^[]{}"
CALL :showline
ECHO --- show conversion using "upcase2 - caret disappears
CALL :upcase2 line
CALL :showline
GOTO :EOF
:upper
FOR %%a 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 CALL SET "%1=%%%1:%%a=%%a%%%"
GOTO :EOF
:upcase
setlocal EnableDelayedExpansion
for /F "delims=" %%a in (%1) do (
ECHO read%%a
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 conv!line!
)
endlocal
GOTO :eof
:upcase2
setlocal ENABLEDELAYEDEXPANSION
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 "%1=!%1:%%b=%%b!"
endlocal&CALL SET "%1=%%%1%%"
GOTO :eof
:showline
SETLOCAL enabledelayedexpansion
ECHO "!line!"
endlocal
GOTO :eof
環境変数名とファイル名はどちらも大文字と小文字を区別しないため、これは無意味です。しかし、あなたが主張するならば、あなたはこのようにすることができます:
@echo off
setlocal enabledelayedexpansion
set lower=john smith 123
set alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZ
set i=0
:letter
set !alpha:~%i%,1!_=!alpha:~%i%,1!
set /a i += 1
if %i% LSS 26 goto letter
set i=0
set upper=
:uppercase
set let=!lower:~%i%,1!
if "%let%" == "" goto done
if defined %let%_ (set upper=%upper%!%let%_!) else (set upper=%upper%%let%)
set /a i += 1
goto uppercase
:done
echo %upper%
私は素晴らしい OPによる回答 を拡張して、バッチファイル全体で呼び出すことができる関数にしました。
@echo off
set "str=Make meeeee all uppercaseeeee!"
echo %str% (Old variable)
call :TOUPPERCASE str
echo %str%
goto :eof
rem FUNCTIONS AT VERY BOTTOM
:TOUPPERCASE
if not defined %~1 exit /b
for %%a in ("a=A" "b=B" "c=C" "d=D" "e=E" "f=F" "g=G" "h=H" "i=I" "j=J" "k=K" "l=L" "m=M" "n=N" "o=O" "p=P" "q=Q" "r=R" "s=S" "t=T" "u=U" "v=V" "w=W" "x=X" "y=Y" "z=Z" "ä=Ä" "ö=Ö" "ü=Ü") do (
call set %~1=%%%~1:%%~a%%
)
goto :eof
結果
Make meeeee all uppercaseeeee! (Old variable)
MAKE MEEEEE ALL UPPERCASEEEEE!
私は2つのファイルを使用し、バッチでは外部jsを呼び出し、バットでは内部varに応答を割り当てました。
コウモリ:
@echo off
for /f %%i in ('cscript //nologo //E:jscript jsfile.js %1') do set VAR=%%i
echo %Var%
Js(同じディレクトリにあるjsfile.js):
WScript.echo(WSH.Arguments(0).toUpperCase())
多くの開発者のように、POSIXユーティリティがWindowsにインストールされている場合(例: https://sourceforge.net/projects/gnuwin32/ のGNUWinユーティリティ)
@echo off
SETLOCAL EnableDelayedExpansion
echo Before: SCEINST is: %SCEINST%
set upper=
for /f "usebackq delims=" %%g in (`echo %SCEINST% ^| tr [:lower:] [:upper:]`) do (
SET upper=%%g
:: get rid of any leading whitespace
set upper=!upper: =!
goto :done
)
:done
echo After: SCEINST (in upper) is now: !upper!
- - - - - 出力 - - - - -
Before: SCEINST is: scprd
After: SCEINST (in upper) is now: SCPRD