batch-file
バッチファイルでのファイル処理
サーチ…
前書き
このトピックでは、バッチでファイルを作成、編集、コピー、移動、および削除する方法を学習します。
バッチでのファイルの作成
バッチでテキストファイルを作成する理由は複数あります。しかし、理由が何であれ、これはあなたがそれをする方法です。
既存のテキストファイルを上書きする場合は>
使い>
。例:
@echo off
echo info to save > text.txt
しかし、既存のテキストファイルにテキストを追加する場合は、 >>
使用し>>
。例:
@echo off
echo info to save >> text.txt
複数行のテキストをファイルに保存する必要がある場合use ()>text.txt
例:
@echo off
(echo username
echo password)>text.txt
ファイルをバッチでコピーする方法
ある場所から別の場所にファイルをコピーすることができます。この例では、教えていきます。
xcopy
コマンドを使用できます。構文は次のとおりですxcopy c:\From C:\To
例:
@echo off
xcopy C:\Folder\text.txt C:\User\Username\Desktop
使用できるスイッチもあります。それらを表示するには、 Start Menu -> Accessories -> Command Prompt
でStart Menu -> Accessories -> Command Prompt
を開き、 xcopy /?
とStart Menu -> Accessories -> Command Prompt
しxcopy /?
ファイルを移動する
moveコマンドを使用すると、ファイルを移動できます。
@echo off
cd C:\Foo\Bat\Baz
move /Y Meow.bat "Meow Folder" >nul
Meow.bat
は、移動するファイルを表します。 "Meow Folder"はMeow.bat
をMeow Folder
移動します。 /Y
は確認のためにプロンプトを表示しないように指示します。これを/-Y
置き換えると、確認のためにバッチファイルのプロンプトが表示されます。 >nul
はコマンド出力を隠します。 >nul
持っていなければ、出力されます:
1 File Moved
ファイルの削除
DEL
( ERASE
エイリアス)コマンドを使用すると、ファイルを削除できます。
@echo off
del foo.ext
このコマンドは、現在のディレクトリからfoo.ext
を削除します。次のようなパスとファイルを指定することもできます。
del C:\Foo\Bar\Baz.ext
しかし、パスの周りに引用符( "
)を付けることは常に理想的です。 ここでその理由を見てください。
DEL
はいくつかのフラグがあります。
旗 | 関数 |
---|---|
/P | ファイルを削除する前にユーザーにプロンプトを表示する |
/F | 読み取り専用ファイルを強制的に削除する |
/S | サブディレクトリ内のファイルを削除する |
/Q | ユーザーのプロンプトを防止します。 |
/A | フィルタ:特定の帰属ファイルのみを削除します。 |
- 文字を使用することは 、そのタイプとして帰属しないことを意味します。 |
xcopyを使わないでファイルをコピーする
この例では 、ユーザーBoeNoeはxcopy
コマンドを使用してファイルをコピーする方法を示しました。 copy
という余分なコマンドもありcopy
。
ここに簡単な例があります:
copy foo.ext bar.ext
foo.ext
をbar.ext
にコピーし、存在しないときはbar.ext
を作成します。また、ファイルへのパスを指定することができますが、引用符(入れて常に理想的である"
、パスの周り)を参照してくださいここに理由。
copy
には多くのフラグもありますcopy /?
参照してくださいcopy /?
コマンドプロンプトでhelp copy
して詳細を表示することもできます。
ファイルのN番目の行を編集する
バッチファイルには、 replace
とappend
( >
と>>
)以外のファイルのn
番目の行を置換するための組み込みメソッドはありません。 for
ループを使用すると、この種の関数をエミュレートできます。
@echo off
set file=new2.txt
call :replaceLine "%file%" 3 "stringResult"
type "%file%"
pause
exit /b
:replaceLine <fileName> <changeLine> <stringResult>
setlocal enableDelayedExpansion
set /a lineCount=%~2-1
for /f %%G in (%~1) do (
if !lineCount! equ 0 pause & goto :changeLine
echo %%G>>temp.txt
set /a lineCount-=1
)
:changeLine
echo %~3>>temp.txt
for /f "skip=%~2" %%G in (%~1) do (
echo %%G>>temp.txt
)
type temp.txt>%~1
del /f /q temp.txt
endlocal
exit /b
メインスクリプトは
replaceLine
関数を呼び出します。ファイル名/変更する行/と置き換える文字列を指定します。関数は入力を受け取ります
- すべての行をループし、置換行の前に一時ファイルに
echo
します - それはファイルに置換行を
echo
します - 残りのファイルに出力を続けます
- 一時ファイルを元のファイルにコピーします。
- 一時ファイルを削除します。
- すべての行をループし、置換行の前に一時ファイルに
メインスクリプトはコントロールを元に戻し、結果を
type
します。