0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【WIndowsバッチ】「 1」(半角スペース+数字)の扱い

Posted at

Windowsバッチで「test 1」のように(半角スペース+数字)を含む文字列をechoしようとしても上手くいかない場合がある。

test.bat
@echo off
setlocal enabledelayedexpansion

set OUTPUT_PATH=".\output.txt"
set INPUT_TEXT_0="test 0"
set INPUT_TEXT_1="test 1"
set INPUT_TEXT_2="test 2"
set INPUT_TEXT_3="test 9"
set INPUT_TEXT_4="test 10"
set INPUT_TEXT_5="test 11"
set INPUT_TEXT_6="test 99"
set INPUT_TEXT_7="test a"

call :OUTPUT_TEXT !INPUT_TEXT_0!
call :OUTPUT_BLANK
call :OUTPUT_TEXT !INPUT_TEXT_1!
call :OUTPUT_BLANK
call :OUTPUT_TEXT !INPUT_TEXT_2!
call :OUTPUT_BLANK
call :OUTPUT_TEXT !INPUT_TEXT_3!
call :OUTPUT_BLANK
call :OUTPUT_TEXT !INPUT_TEXT_4!
call :OUTPUT_BLANK
call :OUTPUT_TEXT !INPUT_TEXT_5!
call :OUTPUT_BLANK
call :OUTPUT_TEXT !INPUT_TEXT_6!
call :OUTPUT_BLANK
call :OUTPUT_TEXT !INPUT_TEXT_7!
call :OUTPUT_BLANK

pause
goto EOF

:OUTPUT_TEXT
echo [OUTPUT_TEXT_1]%~1
echo [OUTPUT_TEXT_1]%~1>> !OUTPUT_PATH!
echo [OUTPUT_TEXT_2]"%~1"
echo [OUTPUT_TEXT_2]"%~1">> !OUTPUT_PATH!
echo [OUTPUT_TEXT_3]%1
echo [OUTPUT_TEXT_3]%1>> !OUTPUT_PATH!
exit /b

:OUTPUT_BLANK
echo.
echo.>> !OUTPUT_PATH!
exit /b

:EOF
コンソール出力
[OUTPUT_TEXT_1]test 0
[OUTPUT_TEXT_1]test
[OUTPUT_TEXT_2]"test 0"
[OUTPUT_TEXT_3]"test 0"

[OUTPUT_TEXT_1]test 1
[OUTPUT_TEXT_2]"test 1"
[OUTPUT_TEXT_3]"test 1"

[OUTPUT_TEXT_1]test 2
[OUTPUT_TEXT_1]test
[OUTPUT_TEXT_2]"test 2"
[OUTPUT_TEXT_3]"test 2"

[OUTPUT_TEXT_1]test 9
[OUTPUT_TEXT_1]test
[OUTPUT_TEXT_2]"test 9"
[OUTPUT_TEXT_3]"test 9"

[OUTPUT_TEXT_1]test 10
[OUTPUT_TEXT_2]"test 10"
[OUTPUT_TEXT_3]"test 10"

[OUTPUT_TEXT_1]test 11
[OUTPUT_TEXT_2]"test 11"
[OUTPUT_TEXT_3]"test 11"

[OUTPUT_TEXT_1]test 99
[OUTPUT_TEXT_2]"test 99"
[OUTPUT_TEXT_3]"test 99"

[OUTPUT_TEXT_1]test a
[OUTPUT_TEXT_2]"test a"
[OUTPUT_TEXT_3]"test a"

続行するには何かキーを押してください . . .
output.txt
[OUTPUT_TEXT_2]"test 0"
[OUTPUT_TEXT_3]"test 0"

[OUTPUT_TEXT_1]test 
[OUTPUT_TEXT_2]"test 1"
[OUTPUT_TEXT_3]"test 1"

[OUTPUT_TEXT_2]"test 2"
[OUTPUT_TEXT_3]"test 2"

[OUTPUT_TEXT_2]"test 9"
[OUTPUT_TEXT_3]"test 9"

[OUTPUT_TEXT_1]test 10
[OUTPUT_TEXT_2]"test 10"
[OUTPUT_TEXT_3]"test 10"

[OUTPUT_TEXT_1]test 11
[OUTPUT_TEXT_2]"test 11"
[OUTPUT_TEXT_3]"test 11"

[OUTPUT_TEXT_1]test 99
[OUTPUT_TEXT_2]"test 99"
[OUTPUT_TEXT_3]"test 99"

[OUTPUT_TEXT_1]test a
[OUTPUT_TEXT_2]"test a"
[OUTPUT_TEXT_3]"test a"

半角スペースを挟んで1桁の数字は数値として認識されるためか期待通りの出力にならない。また1桁の数字でも1とそれ以外で出力が変わる。
半角スペースを挟んでも2桁以上の数字、もしくはアルファベットなど文字列として認識されるものであれば期待通りに出力される。勿論、ダブルクォートで括る(既に括られている場合はサブルーチン側で外さない)ことで回避は可能。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?