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
。
これは、あなたが望むことをするPowershellスクリプトです。
$folder="X:\Test"; # Directory to place the new folders in.
$txtFile="X:\Test\Export.txt"; # File with list of new folder-names
$pattern="\d+.+"; # Pattern that lines must match
get-content $txtFile | %{
if($_ -match $pattern)
{
mkdir "$folder\$_";
}
}
名前に数字が含まれます。
スクリプトを実行するには、次のようにします。
Set-ExecutionPolicy RemoteSigned
と入力してEnterキーを押し、スクリプトの実行を有効にします。プロンプトが表示されたら、Yを押します。X:\Test
には、新しいフォルダを作成する場所への絶対パスを指定します。X:\Test\Export.txt
これらのフォルダーに使用する名前を含むテキストファイルへの絶対パス。\d+.+
パターンと一致している必要があります。 \d+
は任意の数字に一致します.+
は任意の文字に一致します。.ps1
拡張子。スクリーンショット...
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"
次の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"
警告!対象のシステム、および処理するデータが事前にわかっている場合を除き、それらを使用しないでください。 それでもやりたい場合は、期待どおりに機能することを確認してください。
次のスクリプトは、リストファイルのすべての行をループし、実際の行の内容に基づいて名前を付けて、同じ数のフォルダーを作成します。スクリプトは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
このスクリプトは上記のものに似ていますが、この場合、テキストファイルは直接読み込まれず、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
コマンドはバッチスクリプトの実行を停止するため、他のコマンドはスキップされます。