1

テキスト ファイルの最初の行を取得し、末尾のバックスラッシュがある場合はそれを削除しようとする短いバッチ スクリプトを作成しています。これは、入力ファイルの残りの行に対して繰り返されます。ただし、スクリプトを実行すると、行からバックスラッシュが削除されません。これは簡単な修正だと思いますが、いくつかのトラブルシューティング方法を試しましたがうまくいきませんでした。参考までに以下にコードを載せておきます。ありがとう!

@echo on
setLocal EnableDelayedExpansion

::set firstline to firstline of test.txt
set /p firstline=<test.txt

::Remove trailing slash if present
IF !firstline:~-1!==\ SET firstline=!firstline:~0,-1!

::Output firstline (without \ to new txt file)
echo !firstline!>test2.txt

endlocal

test.txt ファイル:

C:\Desktop\example\path\ 

C:\Desktop\example\path\2\

C:\Desktop\example\path\test\  
4

1 に答える 1

4

あなたはそれが単純な問題であることは正しいです。実際、それは4人のキャラクターの導入で解決されますが、すべて同じです.

バッチでバックスラッシュを公開するのは悪い考えです。インタプリタが混乱して、実際のファイルまたはパスを扱っていると考える可能性があります。二重引用符で囲む必要があります。これは、!%&*?/\<> などの他の文字にも当てはまります。主にパスとファイルを扱う特殊文字です。もっとあるかもしれませんし、たまにしか問題にならないものもあります。リダイレクト文字の隣にある場合、1 と 2 でさえ問題を引き起こす可能性があります。

念のために言っておきますが、ここではどちらもsetlocal遅延展開表記!も​​必要ありませんが、害はありません。(ECHO が On のときに変数の内容ではなく変数名を表示することにより、この場合のように遅延表記がデバッグを難しくすることを除いて。)

また、 で 0 を必要としない文字列の最後の文字をトリミングする場合は:~0,-1、 を使用:~,-1すれば十分です。どちらの方法でも害はありませんが。

最後に、デフォルトのecho onは不要です。長いファイルの実行の小さな部分を表示するためのものです。繰り返しになりますが、害はありません。echo onEcho On

@echo on
setLocal EnableDelayedExpansion

::set firstline to firstline of test.txt
set /p firstline=<test.txt

::Remove trailing slash if present
::Your error is below this
IF "!firstline:~-1!"=="\" SET firstline=!firstline:~,-1!

::Output firstline (without \ to new txt file)
echo !firstline!>test2.txt

endlocal
于 2012-09-22T04:46:02.363 に答える