質問: 複数のフォルダを作成し、テキストファイルから行を読み取って名前を付ける方法は? export.txtという名前のプレーンテキストファイルがあります。地理的場所のリストが含まれ、先頭にゼロが付いた3桁の数字が続きます。例--start of file-- 001 aberdeen 002 bellevue 003 camas 004 davenport 005 edgewood 006 ferndale 007 george 008 harrington 009 ilwaco 010 kahlotus --end of file-- ファイルから各行を読み取り、ntfsパーティションの特定の場所にこの名前のフォルダーを作成するスクリプトまたはバッチファイルを作成するにはどうすればよいですか?注!フォルダ名には数字を含める必要があることに注意してください。上記のリストは、実際のフォルダのリストと考えてください。update!実際に作成するフォルダのリストは245で、001から245の範囲です。最初の数行は次のとおりです。--start of file-- 001 harberget 002 långflon 003 källegrafsrös 004 badstuknappen 005 aspberget 006 knipen 007 halsjön 008 n finnskoga 009 båtstad 010 tisjön . . . . 245 milskär --end of file-- 完全なリストはここにあります: http://pastebin.com/snde4bbn martinが提供するpsスクリプトは not working で、å、ä、öなどの文字を使用できます。テキストファイルにある合計245個のうち、116個のフォルダーのみが作成されます。これらの文字のいずれかを含むすべての行をスキップします。そのため、002 långflonおよび003 källegrafsrösなどですが、001 harbergetおよび004 badstuknappen。
回答: バッチ/ vbsハイブリッドソリューションwindowsでテスト済みxp sp3、vista sp2およびwindows 7 sp1。これは、埋め込まれたvbスクリプトを組み込んだ特別に細工されたバッチスクリプトです。この方法ですべき xp sp2の後にリリースされたすべてのオペレーティングシステムと互換性があるスクリプトを取得します。主なクレジットは jeb および dbenham ここで使用されているハイブリッド技術を思いついた(そして洗練された)人。rem^ &@echo off>nul rem^ &if "%~2" == "" exit /b 2 rem^ &pushd "%~2" rem^ &cscript //e:vbscript //nologo "%~f0" "%~1" rem^ &popd rem^ &exit /b dim stream, text, lines, fso set stream = createobject("adodb.stream") stream.open stream.type = 2 stream.charset = "utf-8" stream.loadfromfile wscript.arguments(0) text = stream.readtext stream.close lines = split(text, vbcrlf) set fso = createobject("scripting.filesystemobject") for i = 0 to ubound(lines) fso.createfolder(lines(i)) next 指示 上記のスクリプトをコピーして、メモ帳またはその他のプレーンテキストエディタ(notepad ++など)に貼り付けます。 createfolders.cmdまたは任意の名前で保存します。 .cmd拡張子を維持するようにしてください。 コマンドプロンプトを開き、ファイルを保存したフォルダーに移動します。 cd /d "x:\folder\containing\createfolders.cmd" リストファイルと宛先フォルダーをそれぞれ1番目と2番目のパラメーターとして指定して、バッチスクリプトを実行します。 createfolders.cmd "x:\some\folder\export.txt" "x:\destination\folder" スクリーンショット 参考文献 コマンドラインリファレンス 一時ファイルを使用せずにバッチファイル内にvbscriptを埋め込み、実行することは可能ですか? ストリームオブジェクト(ado) powershellソリューション次のpowershellスクリプトは、上記のソリューションを複製します。 2つのパラメーターを受け入れます。1つはリストファイル(utf-8として保存されていると想定)で、2つ目は宛先フォルダーです。 windowsでテスト済みxp sp3、vista sp2、windows 7 sp1。注windows powershell 2.0はwindows 7にバンドルされていますが、xp/vistaに手動でインストールする必要があります。 windows xpの場合、.net framework 2.0 sp1/sp2をインストールするか、.net framework 2.0 sp2を含む.net framework 3.5 sp1をインストールする必要があります。 windows 8とwindows 8.1には、それぞれpowershell 3.0と4.0が含まれています。if ($args.count -gt 1) { $file=$args[0]; $dest=$args[1]; get-content $file -encoding utf8 | %{ md "$dest\$_" >$null; } } 指示 上記のスクリプトをコピーして、メモ帳またはその他のプレーンテキストエディタ(notepad ++など)に貼り付けます。 createfolders.ps1(または適切な拡張子を保持している限り、他の名前)として保存します。 スクリプトを実行するには、powershellを起動してから、次のいずれかを実行します。 実際のパスに移動して実行します。 cd "c:\some folder" & ".\createfolders.ps1" "x:\some\folder\export.txt" "x:\destination\folder" フルパスを直接指定して実行します。 & "c:\some folder\createfolders.ps1" "x:\some\folder\export.txt" "x:\destination\folder" &は call operator です。 別の方法として、通常のコマンドプロンプトから起動することもできます。 powershell -executionpolicy bypass -nologo -noprofile -file "c:\some folder\createfolders.ps1" "x:\some\folder\export.txt" "x:\destination\folder" 参考文献 windows powershellスクリプトの実行 windows powershellを起動するためのより強力な方法 ファイルシステムのget-content 以前の(有効な種類の)ソリューション警告!対象のシステム、および処理するデータが事前にわかっている場合を除き、それらを使用しないでください。 それでもやりたい場合は、期待どおりに機能することを確認してください。バッチスクリプト次のスクリプトは、リストファイルのすべての行をループし、実際の行の内容に基づいて名前を付けて、同じ数のフォルダーを作成します。スクリプトは2つのパラメーターを受け入れます。最初のパラメーターは、リストが格納されているパスであり、export.txtとしてハードコーディングされています(別のファイル名を自由に入力できますが、スペースは使用しないでください)。後者は宛先フォルダです。@echo off setlocal rem make sure there are enough parameters if "%~2" == "" exit /b 2 rem set the working directory pushd "%~1" rem loop through the list and create the folders for /f "delims=" %%g in (export.txt) do (md "%~2\%%~g") rem restore the working directory and exit popd endlocal & exit /b 既知の制限 asciiまたはansi入力ファイルのみ。 バッチスクリプト-代替utf-8バージョンこのスクリプトは上記のものに似ていますが、この場合、テキストファイルは直接読み込まれず、typeコマンドの出力を通じて解析されます。エンコーディングをutf-8に変更するには、最初にchcpが必要です。この場合、リストはハードコーディングされていませんが、最初のパラメーターの一部として指定する必要があります。 2番目のパラメーターは、宛先フォルダーです。@echo off setlocal rem make sure there are enough parameters if "%~2" == "" exit /b 2 rem set the working directory pushd "%~2" rem set the list file set file="%~1" rem set the encoding to utf-8 chcp 65001 >nul rem loop through the list and create the folders for /f "delims=" %%g in ('type %file%') do (md "%%~g") rem restore the working directory and exit popd endlocal & exit /b 既知の制限 英語ロケールでは、chcp 65001コマンドはバッチスクリプトの実行を停止するため、他のコマンドはスキップされます。