web-dev-qa-db-ja.com

複数のフォルダを作成し、テキストファイルから行を読み取って名前を付ける方法は?

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

5
Samir

これは、あなたが望むことをする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\$_";
    }
}

名前に数字が含まれます。

スクリプトを実行するには、次のようにします。

  1. 管理者としてPowershellを実行します。
  2. Set-ExecutionPolicy RemoteSignedと入力してEnterキーを押し、スクリプトの実行を有効にします。プロンプトが表示されたら、Yを押します。
  3. Powershellを閉じます。
  4. 上記のスクリプトをコピーして、NotepadまたはNotepad ++に貼り付けます。
  5. 置換X:\Testには、新しいフォルダを作成する場所への絶対パスを指定します。
  6. 置換X:\Test\Export.txtこれらのフォルダーに使用する名前を含むテキストファイルへの絶対パス。
  7. 置換\d+.+パターンと一致している必要があります。 \d+は任意の数字に一致します.+は任意の文字に一致します。
  8. 「FileName.ps1」または任意の名前で保存します。 .ps1拡張子。
  9. Windowsエクスプローラーを開き、ps1ファイルを保存した場所に移動します。それを右クリックして、「Powershellで実行」を選択します。

スクリーンショット...

abcd

7
Martin

バッチ/ 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

指示

  1. 上記のスクリプトをコピーして、メモ帳またはその他のプレーンテキストエディタ(Notepad ++など)に貼り付けます。

  2. CreateFolders.cmdまたは任意の名前で保存します。 .cmd拡張子を維持するようにしてください。

  3. コマンドプロンプトを開き、ファイルを保存したフォルダーに移動します。

    cd /d "X:\Folder\containing\CreateFolders.cmd"
    
  4. リストファイルと宛先フォルダーをそれぞれ1番目と2番目のパラメーターとして指定して、バッチスクリプトを実行します。

    CreateFolders.cmd "X:\Some\folder\Export.txt" "X:\Destination\folder"
    

スクリーンショット

bc

参考文献


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; }
}

指示

  1. 上記のスクリプトをコピーして、メモ帳またはその他のプレーンテキストエディタ(Notepad ++など)に貼り付けます。

  2. CreateFolders.ps1(または適切な拡張子を保持している限り、他の名前)として保存します。

  3. スクリプトを実行するには、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

既知の制限

  • 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コマンドはバッチスクリプトの実行を停止するため、他のコマンドはスキップされます。
5
and31415